如果 S 包含一个匿名字段 T,S 的方法集不包含接受者为 *T 的方法提升。
这条原则说的是当我们嵌入一个类型,嵌入类型的接受者为指针的方法将不能被外部类型的值访问。
刚才在golang中国博客上看到这个说法,自己验证了后发现完全可以访问,哪位高手能解释下,期待ing......
我给你一个示例:
package main
import (
"fmt"
)
type T struct{}
func (this *T) MyApi() {
fmt.Println("I am T method")
}
type S struct {
T
}
type MyInterface interface {
MyApi()
}
func main() {
var s S
// Test(s) // 编译通不过
s.MyApi() // 直接调用没问题
}
func Test(inter MyInterface) {
inter.MyApi()
}
也就是,方法集是针对接口实现这个层面来说的。
#1