x = atomic.AddUint64(&x, 1) 形式で書かれている代入式を報告します。
このような操作はアトミックではなく、sync/atomic API でよく見られる誤用です。 操作をアトミックにするには、代入を除去して atomic.AddUint64(&x, 1) のように直接呼び出す必要があります。 この場合、x の値はアドレスによって自動的に更新されます。
例:
import (
"sync/atomic"
)
type Counter uint64
func AtomicTests() {
x := uint64(1)
x = atomic.AddUint64(&x, 1) // エラー "アトミック値への直接代入"
_, x = 10, atomic.AddUint64(&x, 1) // エラー "アトミック値への直接代入"
x, _ = atomic.AddUint64(&x, 1), 10 // エラー "アトミック値への直接代入"
}