golang 值接收者与指针接受者(没有代码只有旁白)

值接收者创建副本通过副本去调用函数求值,因为是副本值所以如果要想在程序中再次被使用的话,函数需要返回这个副本值(要不然值就只能在控制台上看看而已)
指针接收者使用真实的值去调用函数,因为是真实值所以当值被修改时值就已经在整个程序中,所以在函数中不用返回也能使用到
在声明一个新类型之后,声明一个该类型的方法之前,需要先回答一个问题:这个类型的本质是什么。如果给这个类型增加或者删除某个值,是要创建一个新值,还是要更改当前的值?如果是要创建一个新值,该类型的方法就使用值接收者。如果是要修改当前值,就使用指针接收者。这个答案也会影响程序内部传递这个类型的值的方式:是按值做传递,还是按指针做传递。
值接收者函数当在程序中被大量使用到时会大量创建副本而指针接收者是一直在对某个真实的值做修改
var aa user
var bb *user
aa只能使用值接收者的函数 ,bb只能使用指针接受者的函数;但是go底层实现帮助我们实现了它们的相互应用
当aa访问指针接收者时,实际上aa=(&aa)
当bb访问值接收者时,实际上bb=(*bb)

Go语言既允许使用值,也允许使用指针来调用方法,不必严格符合接收者的类型
个人学习理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值