go指针接收器和非指针接收器

1.二者的书写方式不同

type student struct {
   age int8
   name string
}
//指针接收器
func(s *student) ageAdd1(){
   s.age+=1
}
//非指针接收器
func(s student) ageAdd2(){
   s.age+=1
}

2.二者传入方法中的对象不同

指针接收器传入的是struct本身,非指针接收器传入的是struct的copy副本

3.二者访问struct的级别不同

指针接收器可以读写struct中的内容,非指针接收器只能读取struct中的数据但是不能写入,如果写入的话也只是写入到struct的备份中而已。

type student struct {
   age int8
   name string
}

func(s *student) ageAdd1(){
   s.age+=1
}

func(s student) ageAdd2(){
   s.age+=1
}

func(s student) ageAdd3() student{
   s.age+=1
   return s
}

func main(){
   student:=new(student)

   student.ageAdd1()
   fmt.Println(student.age)

   student.ageAdd2()
   fmt.Println(student.age)

   student2:=student.ageAdd3()
   fmt.Println(student2.age)
}
/*
结果
1
1
2
*/

ageAdd1和ageAdd2分别是指针接收器和非指针接收器接收的函数,二者对age都进行+1操作后输出的student中的age都是1,由此可见student中的age进行 +1操作只有ageAdd1进行的一次,ageAdd2对age进行+1操作完全没影响student。
ageAdd3给student副本进行+1操作后返回了student的副本student2,由于ageAdd2之前对副本进行过+1操作,所以student2中的age是2。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值