go 方法集规则

方法集定义了接口的实现规则
先上代码
package main

import (
	"fmt"
)

type notifier interface {
	Notify()
}

type User struct {
	Name string
	Age  int
}

func (s *User) Notify() {
	fmt.Println("name is: ", s.Name)
}

func notifination(n notifier) {
	n.Notify()
}

func main() {
	u := User{"james", 33}
	notifination(u)
}

在这段代码中 ,首先定义了一个叫notifier的接口 实现了Notify接口 接着 定义了一个user结构体  定义了一个接收者为user指针类型的 Notify的method  然后定义了一个notifination的函数 函数的参数为 notifier接口类型。 在main函数中 u为结构体user的值类型 , 当调用函数notifination时 会编译错误, 错误信息为“。。。。”
这里有这个报错 是因为  go中方法集规则:

如图  在这个图中  从接收者的角度展示了方法集的规则     如果一个medthod的接收者定义为值类型 那么在调用的时候 传入值或者指针都可以  如果定义的是指针类型 那么只能为指针类型。也就是说在本例的代码中 如果传入&u 那么就不会有错误。

猜你喜欢

转载自blog.csdn.net/dream_is_possible/article/details/80725512
今日推荐