x = atomic.AddUint64(&x, 1) 형식의 대입 구문을 보고합니다.
이러한 동작은 atomic이 아니며 이는 sync/atomic API의 일반적인 잘못된 사용 사례입니다. 이를 atomic으로 만들기 위해서는 직접 호출을 사용할 수 있도록 대입을 제거해야 합니다: atomic.AddUint64(&x, 1) 이 경우 x의 값은 주소에 의해 atomic하게 업데이트됩니다.
예:
import (
"sync/atomic"
)
type Counter uint64
func AtomicTests() {
x := uint64(1)
x = atomic.AddUint64(&x, 1) // ERROR "atomic 값에 대한 직접 대입"
_, x = 10, atomic.AddUint64(&x, 1) // ERROR "atomic 값에 대한 직접 대입"
x, _ = atomic.AddUint64(&x, 1), 10 // ERROR "atomic 값에 대한 직접 대입"
}