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

例如,我知道.运算符将处理取消引用指针

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

在其他什么情况下,go会这样做?例如,它似乎与数组有关.

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

我在规范中找不到这一点,指针的部分很短,甚至不涉及go 引用.任何关于取消go指针引用规则的澄清都将非常棒!

推荐答案

selector expression(例如x.f)可以做到以下几点:

Select 器automatically dereference pointers到 struct .如果x是指向 struct 的指针, x.y(*x).y的简写;如果字段y也是指向 struct 的指针,则x.y.z(*(*x).y).z的速记,以此类推.如果x包含类型*A的匿名字段,其中 A也是 struct 类型,x.f(*x.A).f的快捷方式.

indexing operation的定义指定可以索引数组指针:

对于类型A*A,其中A是数组类型,或者对于类型S,其中S是切片类型

Go相关问答推荐

Go-Colly:将数据切片为POST请求

在nixos上找不到XInput2.h头文件的包

无法获取RPC描述符

从文件读取字节,将其保存到 struct 体并修改值

调用库和直接操作效率有区别吗?

Docker 执行失败并显示cmd/ENTRYPOINT 中的命令未找到

Go - 永远停止带有上下文的循环

如何解决构建Docker Compose时的权限被拒绝问题

git ls-remote 成功而 go get 失败

由于 main.go 文件中的本地包导入导致构建 docker 容器时出错

加密/椭圆:try 在无效点上进行操作

Golang 中的泛型类型转换

使用 ssh 从私有 gilab 仓库导入一个 go 项目:未知修订

具有两个或多个模型的 GORM 查询

golang pic.ShowImage 为什么它不生成图像而是向我发送base64值

在 go 中将运行命令的标准输出发送到其标准输入

如何使用golang操作很长的字符串以避免内存不足

Unescape 在 rss 中两次逃脱了标题

如何使用通用字段初始化匿名struct数组

在 Go 中表达函数的更好方法( struct 方法)