2015-12-29 24 views
0

當我訪問結構字段時,我不明白結構字面與結構指針之間的區別。有沒有不同的內部行爲?當訪問結構字段時,Golang結構文字和指針之間的區別

type Person struct { 
    Name string 
} 

p := &Person{Name: "Alice"} 
u := Person{Name: "Bob"} 

fmt.Println(p.Name) // any difference ? 
fmt.Println(u.Name) // any difference ? 

我搜索了這一點,但我的帖子發現約值&指針之間的差異,或與「指針傳遞」的方法「傳遞價值」的所有解釋。他們不是我想知道的。

回答

6

uPerson類型的變量。 p是類型爲「指向Person」的變量的變量,它使用匿名(「臨時」)對象的地址進行初始化。表達式p.Name使用指針的自動解除引用,相當於(*p).Namep只要p指向它就會指向它,並且可能隨後被Go的非確定性內存管理器銷燬。

p.Nameu.Name都是string類型的表達式,它們不是「通過指針傳遞」的,因爲它們的地址不在調用中。在fmt.Println的情況下,該值實際上是使用Go的ad-hoc多態性的結構化子類型形式「通過接口」傳遞的。

+0

是的! 「指針的自動解除引用」正是我想要搜索但不知道的關鍵字。 你的回答非常有幫助和清晰。 謝謝。 – Joka

+0

對於不熟悉Go的人以及一般的指針/參考文獻,可以用外行的話來解釋嗎?什麼是實際影響? –