报告使用了可被替换为类型化原子值的原始 sync/atomic 函数,例如 atomic.AddInt64 和 atomic.LoadInt64。
atomic.Int64 等类型化原子值使原子访问成为字段类型的一部分。 这有助于防止对同一值进行非原子访问,并避免 32 位平台上出现对齐问题。
示例:
type Counter struct {
hits int64
}
func (c *Counter) Bump() {
atomic.AddInt64(&c.hits, 1)
}
func (c *Counter) Read() int64 {
return atomic.LoadInt64(&c.hits)
}
要修正代码,请使用将 int64 替换为 atomic.Int64 快速修复。
在应用快速修复后:
type Counter struct {
hits atomic.Int64
}
func (c *Counter) Bump() {
c.hits.Add(1)
}
func (c *Counter) Read() int64 {
return c.hits.Load()
}