【发布时间】:2017-03-03 16:01:53
【问题描述】:
在我查看的大多数 golang 代码库中,人们通过引用使用类型:
type Foo struct {}
myFoo := &Foo{}
我通常采取相反的方法,将所有内容作为副本传递,并且仅在我想对值执行破坏性操作时通过引用传递,这使我可以轻松发现破坏性函数(这相当罕见)。
但是看到引用是司空见惯的,我想这不仅仅是品味问题。我知道复制值是有代价的,这是否会改变游戏规则?或者还有其他为什么首选参考的原因?
如果有人能指出一篇文章或文档说明为什么首选参考文献,那就太好了。
谢谢!
【问题讨论】:
-
嗨@icza,感谢您指出这些,在我输入时它们并没有作为建议出现。第一个似乎确实解决了同样的问题,但所选答案 1/ 指的是“指南”和“良好做法”,但没有明确说明原因(但仍有很多有用的信息!)和 2/ 似乎建议实际上避免默认使用 &Type{} :) 我想在这里清楚地说明支持这种模式的原因可能很有用。
-
这不仅仅关乎速度,Olivier。假设您构建了一堆
Foos,并将这些值放入几个不同的容器(例如切片)中,按值复制它们。这意味着每个容器现在都有每个源值的副本,并且在这些容器中的任何一个中更改它们都不会对其他容器产生任何影响。有时可以,有时则不行。在每种情况下,您都应该考虑要将什么语义放入您正在创建的类型的值中,以及您打算如何使用该类型的值。 -
确实 :) 在那个例子中,在变量初始化时取消引用是否提供了比使用
append( myslice, &myItem )更多的功能?
标签: go