我刚开始潜入Go,我有一个主要的困惑点:我很难理解何时需要明确地取消引用指针。
例如,我知道.
运算符将处理解除引用指针
ptr := new(SomeStruct)
ptr.Field = "foo" //Automatically dereferences
在其他情况下会这样做吗?例如,似乎有数组。
ptr := new([5][5]int)
ptr[0][0] = 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>