参数与返回值中何时使用 “值传递”、“指针传递”
总结
- 对于 receiver,
指针
或值
,如果犹豫,则选指针
。 - 对于 Slices, maps, channels, strings, function, interface 这些的值是内部用指针来实现的,用指针指向它们经常是多余的。
- 其它的地方,大的结构体或者结构体中使用指针的情况必须修改,否则传值,因为通过指针修改值是让人困惑的。
可以使用指针的情况
Receivers 是指针的情况比参数是要多。函数一般不会去修改它们的传入值,或者大结构体的命名类型。因此指南中除了特殊情况默认都是指针。
Jeff Hodges 的 copyfighter 工具可以自动搜索出通过传值的不小的 receivers。
一些不必使用指针的情况
- 小的结构体。
- Slices、maps, channels, strings, and function and interface。