21.Go面向对象-方法值与方法表达式

网友投稿 624 2022-11-22

21.Go面向对象-方法值与方法表达式

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小时内删除侵权内容。

上一篇:Spring注解@Value在controller无法获取到值的解决
下一篇:关于@Value注解取不到值的几种情况
相关文章

 发表评论

暂时没有评论,来抢沙发吧~