假设我们有这种结构(有史以来最简单的结构之一):
type some struct{
I uint32
}
我们希望有一个该类型的变量并在 for 循环中原子地递增(可能在另一个 goroutine 中,但现在情况不同了)。我执行以下操作:
q := some{0}
for i := 0; i < 10; i++ {
atomic.AddUint32(&q.I,1) // increment [1]
fmt.Println(q.I)
}
我们得到了我们所期望的,到目前为止一切都很好,但是如果我们为该类型声明一个函数,如下所示:
func (sm some) Add1(){
atomic.AddUint32(&sm.I,1)
}
并在上面的示例(第 [1] 行)中调用此函数,该值不会增加,我们只会得到零。问题很明显——为什么?
这必须是一些基本的东西,但由于我是新手,所以我没有意识到这一点。