我刚刚开始潜入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是一个切片类型