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  // エラー "アトミック値への直接代入"
}