34

我最近才开始深入研究 Go,我有一个主要的困惑:我很难理解什么时候需要明确地取消引用指针。

例如,我知道.操作员将处理取消引用指针

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

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

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

我在规范中找不到这个,指针部分很短,甚至没有涉及取消引用。对取消引用 go 指针的规则进行任何澄清都会很棒!

4

1 回答 1

44

选择器表达式(例如x.f)这样做:

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

索引操作的定义指定了一个数组指针可以被索引:

对于一个类型A或者*AwhereA是一个数组类型,或者对于一个类型SwhereS是一个切片类型

于 2012-11-23T17:54:09.770 回答