go-zero Demo添加prometheus支持
本文将介绍如何在 zero-helloworld
中支持 prometheus
监控。
本文将介绍如何在 zero-helloworld
中支持 prometheus
监控。
业务有延迟任务需求,开始考虑使用 crontab
实现。但调研之后发现 crontab
对于实现某小时后执行某个操作这类需求并不方便,特此记录。
go-zero 框架已经对 jaeger 等 opentelemetry
框架进行了集成,本文介绍如何配置 jaeger 参数,以便在 go-zero demo 中使用 jaeger 实现 tracing。
工作中启动 rpc 后台服务,当配置文件中指定 127.0.0.1
作为监听的源端 ip 时,k8s 集群探活失败,导致 pod 一直重启。将 127.0.0.1
替换为 0.0.0.0
时,可探活成功。
如果在一个 goroutine 中关闭了 channel,另一个协程对 channel 的读取操作是否会被阻塞?
工作中遇到一个需要阻塞系统以启动消费者的问题,谷歌到多种阻塞方法,但均未提及资源(cpu
)消耗。所以特将多种方法的消耗进行实验,以期得到一个资源消耗的基本结论。
使用代码统计给定整型值中 1 的个数时,对于负数,发现程序会陷入死循环。思考后发现,go 语言中进行算术移位时,如果操作数为负数,移位后结果最终会停留到-1
。
go 中如何使用 recover 恢复 panic。
go编程中可通过go func()
直接启动一个gouroutine进行并发操作。go语言一句很有名的经典语是不要通过共享内存来通信,而是通过通信来共享内存
,此处的共享内存
通常情况下指的都是channel
。本文介绍如何使用fan
模式实现go的并发控制,以达到控制goroutine数量、从同一数据源读取数据并发处理的目的。
工作中经常要调用别的业务团队提供的API接口。在被调方未提供SDK的情况下,需要手动执行http请求以获取相关数据。同一业务不同API的响应,基本都会遵循统一个数据格式,抽象如下:
type Base struct {
Data interface{} `json:"data"`
}
type Info struct {
Field1 int `json:"field1"`
Insides []struct {
Field2 int `json:"field2"`
} `json:"insides"`
}
如此,就免去了对于不同接口通用外部Base
部分的重复定义,只需定义各自的Info
字段并将其赋值给Base.Data
即可。但开发时很容易误用值赋值而非指针赋值,就会导致程序panic。