go 接收器 指针赋值
最近在项目中遇到一个问题,将指针类型参数直接赋值给指针类型接收器,结构虽然方法里面是改变了,但是实际上调用的时候发现没有变化,纠结了半天
在go语言里面,基本都是值传递,接收器也是值传递,所以才会出现这样的问题
示例:
type People struct {
name string
}
func main() {
p := &People{\"gjf\"}
p1 := &People{\"hyc\"}
p.set(p1)
fmt.Println(p.name)
}
func (p *People) set(p1 *People) {
p = p1
fmt.Println(\"set func :\", p.name)
}
输出:
set func : hyc
gjf
因为接收器p 是值传递,会可拷贝一份p指针变量的值,所以直接修改指针是没有效果的
p.name = p1.name
或者 ,直接对值进行操作
*p = *p1
延申:
func main() {
p := &People{\"gjf\"}
change(p)
fmt.Println(p.name)
}
func change(p *People) {
p = &People{name: \"tom\"}
}
显然这样 打印 p.name 也是gjf ,跟上面的问题一样
正确的写法:
p.name = (&People{name: \"tom\"}).name
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。


