2012-11-23 62 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

我刚刚编辑了这篇文章,解释如何对数组指针进行索引。 –