浏览 49
更新于 2020-08-23 08:32
指针 VS 值
当你写 Go 代码的时候,很自然就会去问自己 应该是值还是指向值的指针呢? 这儿有两个好消息,首先,无论我们讨论下面哪一项,答案都是一样的:
- 局部变量赋值
- 结构体指针
- 函数返回值
- 函数参数
- 方法接收器
第二,如果你不确定,那就用指针咯。
正如我们已经看到的,传值是一个使数据不可变的好方法(函数中改变它不会反映到调用代码中)。有时,这是你想要的行为,但是通常情况下,不是这样的。
即使你不打算改变数据,也要考虑创建大型结构体副本的成本。相反,你可能有一些小的结构:
type Point struct {
X int
Y int
}
这种情况下,复制结构的成本能够通过直接访问 X
和 Y
来抵消,而没有其它任何间接操作。
还有,这些案例都是很微妙的,除非你迭代成千上万个这样的指针,否则你不会注意到差异。