今天在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语言很相似。一定要注意指针有关问题