go语言指针问题

今天在go语言指针这里踩了坑。给大家分享下

问题描述

这是一个结构体

type X struct {
    A int
    B int
}

我现在要用一个方法对结构体的A变量设置值,方法如下

//这种写法等价于func setA(value int, x X),
//谁调用它就是把谁传递过来,有点像java的this。但是不一样
func (x X) setA(value int) {
    x.A = value
}

func main() {
	x := X{}
	x.setA(1)
	println(x.A)
        //输出结果为0,不是1
}

我给X.A赋值为1,但是输出的还是0.

原因分析

原因就是 func (x X)  setA(value int)  ==  func setA(value int,x X)

那么重点就是 func setA(value int,x X) 

原因就是 (value int,x X) 这两个参数是形参。只是调用这个方法,复制了一份参数,传入方法栈。不是真正的结构体成员。

问题解决

将结构体指针传入就行。加一个*号

//这里将结构体指针传递过来就行
func (x *X) setA(value int) {
	x.A = value
}

输出为1

总结 go语言的指针和C语言很相似。一定要注意指针有关问题

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值