例如,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
?