内容简介:定义结构方法时的常见困境,你的方法接收器应该使用指针接收器还是值接收器?如果要在方法中更改接收器的状态,操纵它的值,请使用指针接收器。 使用值接收器是不可能的,它按值复制(对值接收器的任何修改都是该副本的本地修改)。如果您定义方法的结构非常大,复制它将比使用值接收器代价更大。
困惑
定义结构方法时的常见困境,你的方法接收器应该使用指针接收器还是值接收器?
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
参考资料
茶歇驿站
一个可以让你停下来看一看,在茶歇之余给你帮助的小站,这里的内容主要是后端技术,个人管理,团队管理,以及其他个人杂想。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
30天自制操作系统
[日] 川合秀实 / 周自恒、李黎明、曾祥江、张文旭 / 人民邮电出版社 / 2012-8 / 99.00元
自己编写一个操作系统,是许多程序员的梦想。也许有人曾经挑战过,但因为太难而放弃了。其实你错了,你的失败并不是因为编写操作系统太难,而是因为没有人告诉你那其实是一件很简单的事。那么,你想不想再挑战一次呢? 这是一本兼具趣味性、实用性与学习性的书籍。作者从计算机的构造、汇编语言、C语言开始解说,让你在实践中掌握算法。在这本书的指导下,从零编写所有代码,30天后就可以制作出一个具有窗口系统的32位......一起来看看 《30天自制操作系统》 这本书的介绍吧!