初学go语言结构体的时候,我就发现当结构体实现某一个接口函数,不管是用结构体初始化变量调用函数还是结构体指针初始化变量调用都调用成功,即使我只用结构体实现了接口函数.
但是如果使用结构体指针实现接口函数,只有用结构体指针初始化变量才能调用.
最后通过查看go语言编译过程发现在使用结构体实现某一接口时,编译器会自动用结构体指针实现该方法.但结构体指针实现方法时,就摆烂了.
查看编译过程指令
go build -gcflags -S main.go
type People interface {
Walk()
}
type man struct {
Name string
}
func (m *man) Walk() {
fmt.Println(m.Name)
}
func main() {
var m1 People = man{"kunkun"} //报错,无法通过编译
var m2 People = &man{"kunkun"}
m1.Walk()
m2.Walk()
}