概念定义

  • 指针接收器
1
func (t *Type) Method() {} //pointer receiver 指针接收器
  • 值接收器
1
func (t Type) Method() {} //value receiver 值接收器

何时使用何者

常在定义struct方法时遇到接收器类型的选择问题

指针接收器

需要改动接收器本身时:若需要在方法里修改接收器的状态或字段值时,使用指针接收器。因为值接收器只是本体的一个副本,对其任何的改动都只是作用在副本上

需要性能的优化:如果struct非常多字段,占用内存大,则使用指针接收器,因为值接收器的副本复制成本太大,导致性能低下。

值接收器

需要并发安全:值接收器因为是副本,因此是并发安全的

无需修改接收器本身时

两者兼存时,如何权衡

你定义的方法可能有指针接收器和值接收器,这时为了统一,选择全部统一改为指针接收器