2
我有以下的結構和:golang方法指針到接收機
type Person struct {
Name string
}
steve := Person{Name: "Steve"}
你能解釋一下以下2種方法(一個沒有指針和一個與接收機)兩如何能夠打印頁。名稱?
豈不名稱不直指着的人(而不是實例史蒂夫?)
我有以下的結構和:golang方法指針到接收機
type Person struct {
Name string
}
steve := Person{Name: "Steve"}
你能解釋一下以下2種方法(一個沒有指針和一個與接收機)兩如何能夠打印頁。名稱?
豈不名稱不直指着的人(而不是實例史蒂夫?)
都指向實例時每次調用該函數時存在,但是(p Person)
指向一個新副本,其中(p *Person)
將始終指向相同的實例。
檢查this例如:
func (p Person) Copy() {
p.Name = "Copy"
}
func (p *Person) Ptr() {
p.Name = "Ptr"
}
func main() {
p1, p2 := Person{"Steve"}, Person{"Mike"}
p1.Copy()
p2.Ptr()
fmt.Println("copy", p1.Name)
fmt.Println("ptr", p2.Name)
}
又看了Effective Go,這是一個很好的資源的語言。
因此我假設如果方法改變了p.Name的值,那麼它會改變原來的'史蒂夫',但如果我改變了'(p Person)'版本中Name的值,我改變了將會是立即無法訪問,因爲我沒有處理副本? – lukemh
正確,檢查更新的示例。 – OneOfOne
就像說明一樣,按值調用方法時性能存在差異。根據結構的大小或調用方法的頻率,它可能也可能不重要,但是可以考慮:) – jocull