类型的值也可以调用指针接收者的方法!
学习golang中关于方法部分知识的人一定了解过方法集(Method Set)
的概念,也一定对上面这张图不陌生,方法集定义如下规则:
规则:
类型的值的方法集只包含值接收者声明的方法
指向 T 类型的指针的方法集既包含值接收者声明的方法,也包含指针接收者声明的方法
实际使用过程中会发现,在T的值可寻址的情况下,类型的值也可以调用指针接收者的方法
package main
import "fmt"
type baseImpl string
const (
BI = baseImpl("1234")
)
type base interface {
func1 ()
}
func (b *baseImpl) func1() {
fmt.Println("invoke base impl func1")
}
func main() {
bi := baseImpl("1234")
bi.func1() // 正常执行,输出 "invoke base impl func1"
BI.func1() // 编译器报错,Cannot call a pointer method on