NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
### 什么是方法集 类型的方法集是指可以被该类型的值调用的所有方法的集合. 用例value和pointer调用方法(含匿名字段)不收方法集约束,编译器总是查找全部方法,并自动转换receiver实参 . #### *T指针变量方法集 一个指向自定义类型的值的指针,他的方法集由该类型定义的所有方法组成,无论这些方法接收的是一个值还是一个指针. 如果在指针上调用一个接收值的方法,go语言会聪明的将该指针解引用,并将指针所指的底层值作为方法的接收者. ~~~ type Person struct { name string age int gender byte } func (p Person) setInfoValue() { fmt.Println("setInfoValue") } func (p *Person) setInfoPointer() { fmt.Println("setInfoPointer") } func main() { p := &Person{"jack", 19, 1} p.setInfoPointer() //先把(*p)转换成p后再调用,等价于上面 (*p).setInfoValue() //内部做的转换,先把指针p转成*p再调用 //(*p).setInfoValue p.setInfoValue() } ~~~ ~~~ setInfoPointer setInfoValue setInfoValue ~~~ #### T普通变量方法集 ~~~ type Person struct { name string age int gender byte } func (p Person) setInfoValue() { fmt.Println("setInfoValue") } func (p *Person) setInfoPointer() { fmt.Println("setInfoPointer") } func main() { //结构体变量是一个指针变量,它能够调用哪些方法,这些方法就是一个集合,简称一个方法集 p := Person{"jack", 19, 1} //内部先把p转换为&p在调用 p.setInfoPointer() p.setInfoValue() } ~~~ ~~~ setInfoPointer setInfoValue ~~~