内容简介:定义结构方法时的常见困境,你的方法接收器应该使用指针接收器还是值接收器?如果要在方法中更改接收器的状态,操纵它的值,请使用指针接收器。 使用值接收器是不可能的,它按值复制(对值接收器的任何修改都是该副本的本地修改)。如果您定义方法的结构非常大,复制它将比使用值接收器代价更大。
困惑
定义结构方法时的常见困境,你的方法接收器应该使用指针接收器还是值接收器?
type T struct {
a int
}
func (tv T) Mv(a int) int { return 0 } // value receiver
func (tp *T) Mp(f float32) float32 { return 1 } // pointer receiver
什么时候使用指针接收器
修改接收器
如果要在方法中更改接收器的状态,操纵它的值,请使用指针接收器。 使用值接收器是不可能的,它按值复制(对值接收器的任何修改都是该副本的本地修改)。
优化
如果您定义方法的结构非常大,复制它将比使用值接收器代价更大。
值接收器在原始类型值的副本上运行,这意味着涉及成本,特别是如果结构非常大,并且接收的指针更有效。
什么时候使用值接收器
- 如果您不需要编辑接收器值,请使用值接收器。
- 值接收器是并发安全的,而指针接收器不是并发安全的。
有一种情况,您可能希望将指针接收器用于通常使用值接收器的方法,并且当您在该类型上定义了其他指针接收器时,为了保持一致性,您应该在所有方法中使用指针接收器。
Go CodeReview 注释
选择是否在方法上使用值或指针接收器可能很困难,尤其是对于新的 Go 程序员。
如果有疑问,请使用指针,但有时候值接收器是有意义的,通常是出于效率的原因,例如小的不变结构或基本类型的值。
一些有用的指导:
time.Time
参考资料
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- golang中值类型/指针类型的变量区别总结
- openCV之中值滤波&均值滤波(及代码实现)
- iOS知识梳理 - Objc语法中值得注意的东西
- C++ 实现 CVPR 2019 side window 中值滤波
- Go 1.15 中值得关注的几个变化
- Go 1.11中值得关注的几个变化
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Mastering Regular Expressions, Second Edition
Jeffrey E F Friedl / O'Reilly Media / 2002-07-15 / USD 39.95
Regular expressions are an extremely powerful tool for manipulating text and data. They have spread like wildfire in recent years, now offered as standard features in Perl, Java, VB.NET and C# (and an......一起来看看 《Mastering Regular Expressions, Second Edition》 这本书的介绍吧!