Pointer

golang: change instance address in his method

在实例方法内修改实例地址

1 minute read

前提回顾 对于结构体中的指针应用,大部分可能知道的是如下两代码的区别 func (a *AA) funcA() func (a AA) funcB() 区别在于,我们在funcA内修改a的值,是可以成功的,但是在funcB修改a的值是失败的。 因为funcA中的a是指针传递,funcB中的a是值传递。这个大家都知道。 今天话题 先上代码 package main import ( "fmt" ) type AA struct { xyz string opq string } func (this *AA) Change() { b := &AA{xyz: "xyz1", opq: "opq1"} this = b fmt.Println("in this:", this, "addr:", &this) } func main() { a := &AA{xyz: "xyz0", opq: "opq0"} fmt.Println("before a:", a, "addr:", &a) a.Change() fmt.Println("after a:", a, "addr:", &a) } 那么问题来了,请回答一下程序执行过程的三个输出是什么。