规格说:
类型的方法集决定了该类型实现的接口以及可以使用该类型的接收器调用的方法。
所以,为了验证这一点,下面是代码:
package main
import "fmt"
// I interf
type I interface {
hello()
goodbye()
}
// T type
type T struct {
name string
}
func (t T) hello() {
fmt.Println("Hello", t.name)
}
func (t *T) goodbye() {
fmt.Println("Goodbye", t.name)
}
func main() {
var t1 T = T{"James"}
t1.hello()
t1.goodbye()
}
t1.goodbye()尽管goodbye()方法不是类型的方法集的一部分,T但仍然有效。因为,t1.goodbye()在内部工作,因为(&t1).goodbye()它满足以下规则:
如果您有 aT并且它不可寻址,则只能调用接收器类型为 的方法T,而不是*T。
但是,规范说,方法调用遵循以下规则:
类型的方法集决定了该类型实现的接口以及可以使用该类型的接收器调用的方法。
t1.goodbye()as (&t1).goodbye()break 方法调用规则的调用吗?
慕婉清6462132
相关分类