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 那么就不会有错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值