小编wym*_*mli的帖子

`//go:build` 和 `// +build` 指令之间有什么区别?

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

build go go-build

7
推荐指数
1
解决办法
134
查看次数

何时在普罗米修斯中使用仪表或直方图来记录请求持续时间?

我是指标监控的新手。

如果我们想记录请求的持续时间,我认为我们应该使用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)

谢谢~

metrics go prometheus

7
推荐指数
2
解决办法
6113
查看次数

我们什么时候应该使用 CacheLinePad 来避免错误共享?

众所周知,使用 pad 使结构独占一个或多个高速缓存行有利于性能。

但是对于什么场景,我们应该添加如下所示的pad来提高性能呢?
这里有一些经验法则吗?

import "golang.org/x/sys/cpu"

var S struct {
    _                   cpu.CacheLinePad
    A                   string
    _                   cpu.CacheLinePad
}
Run Code Online (Sandbox Code Playgroud)

caching go false-sharing

3
推荐指数
1
解决办法
722
查看次数

3
推荐指数
1
解决办法
78
查看次数

Test_xxx func 访问 golang 中的共享数据安全吗?

我对 golang 单元测试感到困惑。

我有 2 个Test_xxx函数,例如Test_1Test_2
在中Test_1,我将更改一个全局变量,可以Test_2看到变化吗?

此外,如果我使用monkey patch而不是更改全局变量,其他Test_xxx函数会感知到修补吗?
即,我是否有必要在返回时使用 defer 取消 func 替换Test_xxx

unit-testing monkeypatching global-variables go

2
推荐指数
1
解决办法
1674
查看次数