我最近才刚开始接触Go,我有一个主要的困惑点:我在努力理解何时确切需要显式取消引用指针。
例如,我知道.运算符将处理对指针的解引用
.
ptr := new(SomeStruct) ptr.Field = "foo" //Automatically dereferences
在其他哪些情况下会这样做?例如,似乎使用数组。
ptr := new([5][5]int) ptr[0][0] = 1
我在规范中找不到此内容,指针部分很短,甚至没有提到取消引用。对取消引用go的指针的规则进行的任何澄清都将很棒!
所述选择器表达式(例如x.f)这是否:
x.f
选择器会 自动取消引用 结构的 指针 。如果x是指向结构的指针, x.y则为的简写(*x).y;如果字段y也是指向struct的指针,x.y.z则为的简写(*(*x).y).z,依此类推。如果x包含类型的匿名字段*A,其中 A也是结构类型,x.f则是的快捷方式(*x.A).f。
x
x.y
(*x).y
y
x.y.z
(*(*x).y).z
*A
A
(*x.A).f
索引操作的定义指定可以对数组指针进行索引:
对于a类型A或*Awhere A是数组类型,或者对于type 是Swhere S切片类型
S