我读过这篇与 Go 完全无关的有趣博客文章,作者说的一件事引起了我的注意,以下引用:... 例如,将通道作为函数的参数传递给 all 是有效的,因为 Go 中的通道就像 C 中实现的通道数据结构的指针一样简单。 map 和其他一些也是如此类型。但是传递数组或结构体效率低下;相反,我们应该传递指向这些类型的指针。为什么在使用某些 Go 内部类型或结构时传递指针效率低下?
2 回答
明月笑刀无情
TA贡献1828条经验 获得超4个赞
传递指针并不是低效的。但作者是对的:因为数组和结构体默认是按值传递的,所以它们的内容会被复制到每个新的函数调用中。这可能是低效的。
根据Go slices: usage 和 internals,数组按值传递。(切片使用指向底层数组的指针,因此它们的传递效率更高。)
与切片一样,通道由make
(至少隐式地)分配,因此通道充当对实际数据结构的引用。
因此,当您使用结构体和实际数组时,通常会改为传递它们的引用。(有关此问题的更多详细信息,请参阅 Sean 的回答。他提出了一个很好的观点,即复制并不总是低效的。有时这是可取的。)
- 2 回答
- 0 关注
- 218 浏览
添加回答
举报
0/150
提交
取消