在 Go 语言里,方法和函数只差了一个,那就是方法在 func 和标识符之间多了一个参数。
type user struct {
name string,
email string,
}
//这是函数的定义
func notify(email string) {
fmt.Println("Email is %s", email)
}
//这是方法的定义
func (u user) notify(email string) {
fmt.Println("Email is %d", email)
}
我们可以看到,方法是在 func 和 notify 之间多了一个 user 类型的参数 u ,这个 u 就称作接收者。
接受者类型
接收者有两种,一种是值接收者,一种是指针接收者。顾名思义,值接收者,是接收者的类型是一个值,是一个副本,方法内部无法对其真正的接收者做更改;指针接收者,接收者的类型是一个指针,是接收者的引用,对这个引用的修改之间影响真正的接收者。像上面一样定义方法,将 user 改成 *user 就是指针接收者。
举个例子
type GoProgrammer struct {
}
type Programmer interface {
writeCode() string
}
func (*GoProgrammer) writeCode() string {
return "hello ksl"
}
func Test_interface(t *testing.T) {
var p = new(GoProgrammer)
p.writeCode()
}