为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中传递指针与值

在 Go 中传递指针与值

Go
万千封印 2021-06-30 09:00:47
我读过这篇与 Go 完全无关的有趣博客文章,作者说的一件事引起了我的注意,以下引用:... 例如,将通道作为函数的参数传递给 all 是有效的,因为 Go 中的通道就像 C 中实现的通道数据结构的指针一样简单。 map 和其他一些也是如此类型。但是传递数组或结构体效率低下;相反,我们应该传递指向这些类型的指针。为什么在使用某些 Go 内部类型或结构时传递指针效率低下?
查看完整描述

2 回答

?
明月笑刀无情

TA贡献1828条经验 获得超4个赞

传递指针并不是低效的。但作者是对的:因为数组和结构体默认是按值传递的,所以它们的内容会被复制到每个新的函数调用中。这可能是低效的。

根据Go slices: usage 和 internals,数组按值传递。(切片使用指向底层数组的指针,因此它们的传递效率更高。)

与切片一样,通道由make(至少隐式地)分配,因此通道充当对实际数据结构的引用

因此,当您使用结构体和实际数组时,通常会改为传递它们的引用。(有关此问题的更多详细信息,请参阅 Sean 的回答。他提出了一个很好的观点,即复制并不总是低效的。有时这是可取的。)


查看完整回答
反对 回复 2021-07-05
  • 2 回答
  • 0 关注
  • 218 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信