Golang Go语言中什么时候应该把方法绑定在struct的值上而不是指针上?
不知道我的理解是不是正确的 https://segmentfault.com/a/1190000006803598
感觉 golang 能把方法绑定在 struct 的值上是一种非常奇怪的设计。既然没有任何明显的好处,为何还要提供给用户呢?
Golang Go语言中什么时候应该把方法绑定在struct的值上而不是指针上?
其实你把 struct 当成一个函数的参数就明了了,实际上,也是一个参数,隐含的参数。
函数传参可以传值或者传址,传值的好处是可以使得结构体只读,传址可以改变结构体的成员值。
更多关于Golang Go语言中什么时候应该把方法绑定在struct的值上而不是指针上?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好问题,暂时想不出为什么…
我都是看老黄历来决定的
不确定就用指针
只有 struct 足够小时(塞得进 L1 )传 struct ,因为指针还要多寻址一次
还有对象不传出函数的话怎么样都行
1 楼正解
理解了 immutability 的好处就能理解传值的好处了。
绝大多数情况下,无脑使用指针即可。
一般的情况下,无意中就用值了,比如 type Foo int 的时候。
更少的情况下,不得不使用值的时候,自然会去选择用值。
在Golang中,选择将方法绑定到struct的值上还是指针上,通常取决于方法的用途和对struct实例的修改需求。以下是一些考虑因素,可以帮助你决定何时将方法绑定在struct的值上而不是指针上:
-
不可变性:如果方法不需要修改struct的任何字段,那么将其绑定到值上是合理的。这有助于保持数据的不可变性,使得方法调用更加安全。
-
性能:对于小型的struct,传递值可能比传递指针的开销更小。然而,对于大型struct或包含大量数据的struct,传递指针通常更为高效,因为它避免了数据的复制。
-
方法调用者:如果方法的调用者持有的是struct的值而不是指针,那么将方法绑定到值上可以使调用更加直接和方便。
-
一致性:如果struct的其他方法都是绑定到值上的,为了保持一致性,新的方法也应该绑定到值上。这有助于减少混淆和潜在的错误。
-
接口实现:如果struct需要实现一个接口,并且该接口的方法签名要求接收者为值类型,那么方法必须绑定到struct的值上。
总的来说,如果方法不需要修改struct的状态,并且struct相对较小或不可变性是一个重要考虑因素,那么将方法绑定到struct的值上是一个合理的选择。然而,在大多数情况下,特别是对于可能修改struct字段的方法,将方法绑定到指针上更为常见和实用。