golang 什么时候应该把方法绑定在 struct 的值上而不是指针上?

2016-09-02 21:54:25 +08:00
 taowen
不知道我的理解是不是正确的 https://segmentfault.com/a/1190000006803598

感觉 golang 能把方法绑定在 struct 的值上是一种非常奇怪的设计。既然没有任何明显的好处,为何还要提供给用户呢?
1680 次点击
所在节点    Go 编程语言
8 条回复
pathletboy
2016-09-02 22:09:33 +08:00
其实你把 struct 当成一个函数的参数就明了了,实际上,也是一个参数,隐含的参数。
函数传参可以传值或者传址,传值的好处是可以使得结构体只读,传址可以改变结构体的成员值。
rahuahua
2016-09-02 23:07:36 +08:00
好问题,暂时想不出为什么....
chzyer
2016-09-02 23:17:08 +08:00
我都是看老黄历来决定的
mengzhuo
2016-09-02 23:24:46 +08:00
不确定就用指针
只有 struct 足够小时(塞得进 L1 )传 struct ,因为指针还要多寻址一次
还有对象不传出函数的话怎么样都行
Comdex
2016-09-03 01:02:12 +08:00
1 楼正解
mind3x
2016-09-03 01:25:26 +08:00
理解了 immutability 的好处就能理解传值的好处了。
zeroday
2016-09-03 10:04:44 +08:00
1. receiver 通常用指针( ref:https://github.com/golang/go/wiki/CodeReviewComments#receiver-type)
2. Slices, maps, channels, strings, function values, and interface values 实现机制类似指针,所以可以直接传递
3. 大的结构体和将要修改的结构体用指针。因为指针拷贝代价小,并且可以直接操作对象。
darasion
2016-09-19 08:48:50 +08:00
绝大多数情况下,无脑使用指针即可。
一般的情况下,无意中就用值了,比如 type Foo int 的时候。
更少的情况下,不得不使用值的时候,自然会去选择用值。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303558

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX