如果我有以下结构的实例type Node struct { id string name string address string conn net.Conn enc json.Encoder dec json.Decoder in chan *Command out chan *Command clients map[string]ClientNodesContainer}我不明白什么时候应该通过引用发送结构,什么时候应该通过值发送它(考虑到我不想对该实例进行任何更改),是否有一个更容易决定的经验法则?我能找到的只是在复制小或便宜时按值发送一个结构,但是例如,小真的意味着小于 64 位地址吗?如果有人能指出一些更明显的规则,我会很高兴
3 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
规则非常简单:
Go 中没有“按引用传递/发送”的概念,你所能做的就是按值传递。
关于是传递结构的值还是指向结构的指针的问题(这不是通过引用调用!):
如果要修改函数或方法内部的值:传递一个指针。
如果不想修改值:
如果您的结构很大:使用指针。
否则:没关系。
所有这些考虑复制成本是多少都是在浪费时间。即使对于中等大小的结构,副本也很便宜。在分析之后传递一个指针可能是一个合适的优化。
你的结构不大。一个大型结构包含像wholeWorldBuf [1000000]uint64
. 像您这样的微小结构可能会或可能不会从传递指针中受益,而任何给出哪个更好的建议的人都在撒谎:这完全取决于您的代码和调用模式。
如果您用尽了合理的选项,并且分析表明复制结构花费了时间:请尝试使用指针。
MYYA
TA贡献1868条经验 获得超4个赞
大多数情况下,您应该使用按引用传递。像:
func (n *Node) exampleFunc() {
...
}
只有当您希望使用按值传递实例时,您才希望确保您的实例不受更改的影响。
- 3 回答
- 0 关注
- 184 浏览
添加回答
举报
0/150
提交
取消