比方說,我們有這樣的一個結構(最簡單的一個曾經):奇怪的行爲
type some struct{
I uint32
}
我們希望有這種類型的變量,可以原子方式增加在循環(可能在另一個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])中,值不會遞增,我們只會得到零。這個問題很明顯 - 爲什麼?
這必須是基本的東西,但因爲我是新來的,我沒有意識到它。
對Go語言指針的Tha方法有點混亂。在Go中,您可以定義一個方法接收器來指定哪個結構附加某個函數,以便將其作爲方法調用。 –