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

Dan*_*zer 23 pointers go

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

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

ptr := new(SomeStruct)
ptr.Field = "foo" //Automatically dereferences
Run Code Online (Sandbox Code Playgroud)

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

ptr := new([5][5]int)
ptr[0][0] = 1
Run Code Online (Sandbox Code Playgroud)

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

zzz*_*zzz 34

所述选择器表达式(例如x.f)这是否:

选择器自动取消引用指向结构的指针.如果x是指向结构的指针, x.y则是(*x).y; 如果该字段y也是指向结构的指针,x.y.z则是简写(*(*x).y).z,依此类推.如果x包含类型的匿名字段*A,其中 A也是结构类型,x.f则是一个快捷方式(*x.A).f.

索引操作的定义指定可以索引数组指针:

对于类型的A*A其中A是一个数组类型,或用于一种类型的S,其中S是一个切片类型

  • 我刚刚编辑了帖子来解释如何索引数组指针. (3认同)
  • 我觉得,如果Go决定允许同时使用指针和非指针对象引用,那么它们就不应混在一起有时会自动执行,有时则不允许。在直接引用上使用`.`并在指针上使用`->`会更清楚,因此至少在什么东西不是指针的情况下至少是清楚的。而且必须一直做(* x)是拥有`->`运算符的重点。 (2认同)