小程序原生组件—提升你的小程序体验
638
2022-11-22
21.Go面向对象-方法值与方法表达式
21.Go面向对象-方法值与方法表达式
5 方法值与方法表达式
在上一章节的案例中,我们调用结构体(类)中的方法,一般都是通过如下的方式:
var dog Dogdog.Brak()var cat Catcat.Brak()
或者是指针变量,现在,在给大家补充另外一种方式。
方法值
如下所示:
var dog DogdFunc := dog.Brak // 保存方法地址dFunc()
以上调用的方式称为方法值。
这种方式隐藏了接收者。
方法表达式
还有一种调用的方式是通过 方法表达式,如下所示:
type Person struct { name string // 名字 age int // 年龄 sex byte // 性别,字符类型}// 定义结构体变量为接收者func (p Person) SetInfoValue() { fmt.Printf("SetInfoValue: %p, %v\n", &p, p)}// 定义结构体指针为接收者func (p *Person) SetInfoPointer() { fmt.Printf("SetInfoPointer: %p, %v\n", p, p)}func main() { person := Person{"mike", 18, 'm'} fmt.Printf("main: %p, %v\n", &person, person) // 方法值 f := p.SetInfoPointer // 隐藏了接收者 f1 := (Person).SetInfoValue f1(person) // 显示把接收者传递过去 ==》 person.SetInfoValue() f2 := (*Person).SetInfoPointer f2(&person) // 显示把接收者传递过去 ==》 person.SetInfoPointer()}// 执行:main: 0xc0000a63a0, {mike 18 109}SetInfoValue: 0xc0000a6400, {mike 18 109}SetInfoPointer: 0xc0000a63a0, &{mike 18 109}
方法表达式需要显示把接收者传递过去。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~