Go的指针什么时候取消引用自己

时间:2012-11-23 17:43:39

标签: pointers go

我刚开始潜入Go,我有一个主要的困惑点:我很难理解何时需要明确地取消引用指针。

例如,我知道.运算符将处理解除引用指针

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

在其他情况下会这样做吗?例如,似乎有数组。

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

我一直无法在规范中找到这个,指针部分非常短,甚至没有触及解除引用。任何关于解除引用指针的规则的澄清都会很棒!

1 个答案:

答案 0 :(得分:32)

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是切片类型< / p>