在 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()
}

08-12 20:08