小编典典

Go的指针何时取消引用自己

go

我最近才刚开始接触Go,我有一个主要的困惑点:我在努力理解何时确切需要显式取消引用指针。

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

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

在其他哪些情况下会这样做?例如,似乎使用数组。

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

我在规范中找不到此内容,指针部分很短,甚至没有提到取消引用。对取消引用go的指针的规则进行的任何澄清都将很棒!


阅读 276

收藏
2020-07-02

共1个答案

小编典典

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

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

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

对于a类型A*Awhere A是数组类型,或者对于type 是Swhere S切片类型

2020-07-02