例如,https : //github.com/golang/sys/blob/master/cpu/cpu_gccgo_x86.go#L5:
//go:build (386 || amd64 || amd64p32) && gccgo
// +build 386 amd64 amd64p32
// +build gccgo
package cpu
Run Code Online (Sandbox Code Playgroud)
在我看来,作为构建标签,// +build ... 可以很好地工作。
为什么//go:build仍然明确指定?
顺便说一句,很难找到 的手册//go:build,但// +build很容易(https://pkg.go.dev/cmd/go#hdr-Build_constraints)
我是指标监控的新手。
如果我们想记录请求的持续时间,我认为我们应该使用gauge,但在实践中,有人会使用histogram。
例如,在 中grpc-ecosystem/go-grpc-prometheus,他们更喜欢使用histogram来记录持续时间。对于使用指标类型是否存在商定的最佳实践?或者这只是他们自己的喜好。
// ServerMetrics represents a collection of metrics to be registered on a
// Prometheus metrics registry for a gRPC server.
type ServerMetrics struct {
serverStartedCounter *prom.CounterVec
serverHandledCounter *prom.CounterVec
serverStreamMsgReceived *prom.CounterVec
serverStreamMsgSent *prom.CounterVec
serverHandledHistogramEnabled bool
serverHandledHistogramOpts prom.HistogramOpts
serverHandledHistogram *prom.HistogramVec
}
Run Code Online (Sandbox Code Playgroud)
谢谢~
众所周知,使用 pad 使结构独占一个或多个高速缓存行有利于性能。
但是对于什么场景,我们应该添加如下所示的pad来提高性能呢?
这里有一些经验法则吗?
import "golang.org/x/sys/cpu"
var S struct {
_ cpu.CacheLinePad
A string
_ cpu.CacheLinePad
}
Run Code Online (Sandbox Code Playgroud) 例如,
defer profile.Start().Stop()
Run Code Online (Sandbox Code Playgroud)
是否等于:
p := profile.Start()
defer p.Stop()
Run Code Online (Sandbox Code Playgroud) 我对 golang 单元测试感到困惑。
我有 2 个Test_xxx函数,例如Test_1和Test_2。
在中Test_1,我将更改一个全局变量,可以Test_2看到变化吗?
此外,如果我使用monkey patch而不是更改全局变量,其他Test_xxx函数会感知到修补吗?
即,我是否有必要在返回时使用 defer 取消 func 替换Test_xxx?