接口-值接收者和指针接收者区别

304 阅读1分钟

方法

  1. 它和函数的区别在于方法有一个接收者,给一个函数添加一个接收者,那么它就变成了方法。接收者可以是值接收者,也可以是指针接收者。可以互相调用

image.png

如果实现了接收者是值类型的方法,会隐含地也实现了接收者是指针类型的方法。 值接收者和指针接收者的区别 | Go 程序员面试笔试宝典 (golang.design)

type User struct {
  Name  string
  Email string
}

func (u User) Notify() error

// User 类型的值可以调用接受者是值的方法
damon := User{"AriesDevil", "ariesdevil@xxoo.com"}
damon.Notify()

// User 类型的指针同样可以调用接受者是值的方法
alimon := &User{"A-limon", "alimon@ooxx.com"}
alimon.Notify()

定义一个接收者为User值类型的方法Notify,调用时需要值类型或者指针类型。注意,当接受者是值类型时,该方法操作对应接受者的值的副本(意思就是即使你使用了指针调用函数,但是函数的接受者是值类型,所以函数内部操作还是对副本的操作,而不是指针操作。

image.png