在Go中,如果我用指針定義一個函數作爲接收器,它不應該只允許從指針調用函數嗎?爲什麼從該值本身調用該函數並且具有相同的效果是可以的。Go用指針接收器調用函數的語法
例如,在以下程序中:m1.reset()& m2.reset()具有相同的效果。儘管m1是一個值,m2是一個指針。
我有點困惑,因爲有做同樣的事情的兩種方法,我不知道哪一個要遵循。儘管大部分代碼遵循使用指針字段調用函數的約定。我錯過了什麼嗎?
package main
import "fmt"
type MyStruct struct {
X int
}
func (m *MyStruct) reset() {
m.X = 0
}
func main() {
m1 := MyStruct{1}
m2 := &MyStruct{1}
fmt.Println(m1.X)
fmt.Println(m2.X)
m1.reset()
m2.reset()
fmt.Println(m1.X)
fmt.Println(m2.X)
}
你也可以添加,難道不應該取消引用接收參數傳遞,'M * MyStruct',在函數'reset()'的定義中訪問它的字段'X',就像'(* m).X = 0'。但這也是方便的簡寫或語法糖。 – 2015-06-04 09:39:43