2012-11-23 109 views
18

我剛剛開始潛入Go,我有一個主要的困惑點:我正在努力瞭解何時需要明確地解引用指針。Go的指針何時解除引用

比如我知道.運營商將負責提領的指針

ptr := new(SomeStruct) 
ptr.Field = "foo" //Automatically dereferences 

在哪些其他情況下不會去這樣做呢?例如,它似乎與數組。

ptr := new([5][5]int) 
ptr[0][0] = 1 

我一直無法找到這在規範中,指針部分很短,甚至不碰解引用。任何關於取消引用規則的澄清都將非常棒!

+0

與非常豐富的答案相關的問題:http://stackoverflow.com/questions/20849751/rule-for-go-pointers-references-dereferencing – greenoldman

回答

26

selector expression(例如x.f)做的是:

選擇器自動解除引用指針到結構。如果x是指向結構的指針,則 x.y(*x).y的簡寫;如果字段y也是指向結構體的指針,則x.y.z是 簡寫爲(*(*x).y).z,等等。如果x包含類型爲*A的匿名字段,其中 A也是結構類型,則x.f(*x.A).f的快捷鍵。

indexing operation的定義指定的數組指針可以被索引:

對於A型或*A其中A是數組類型,或用於S類型的其中S是的切片類型

+0

所以除了spec中的選擇器表達式之外,沒有提及自動解引用? – jozefg

+0

我還沒找到它。要麼我是盲人,要麼是規格上的遺漏。有人應該填寫[問題](http://code.google.com/p/go/issues/list)。 – zzzz

+2

我剛剛編輯了這篇文章,解釋如何對數組指針進行索引。 –