1、go方法值接收者和指针接收者
结论:如果方法的接收者是指针类型,无论调用者是对象还是对象指针,修改的都是对象本身,会影响调用者
如果方法的接收者是值类型,无论调用者是对象还是对象指针,修改的都是对象的副本,不影响调用者
package main import "fmt" type Person struct { age int } // 如果实现了接收者是指针类型的方法,会隐含地也实现接收者是值类型的IncrAge1方法 // 会修改age的值 func (p *Person) IncrAge1() { p.age += 1 } // 如果实现了接收者是值类型的方法,会隐含地也实现了接收者是指针类型的IncrAge2方法 // 不会修改age的值 func (p Person) IncrAge2() { p.age += 1 } // 如果实现了接收者是值类型的方法,会隐含地也实现接收者是指针类型的GetAge方法 func (p Person) GetAge() int { return p.age } func main() { //p1是值类型 p1 := Person{age: 20} //值类型 调用接收者是指针类型的方法 p1.IncrAge1() fmt.Println(p1.GetAge()) //值类型 调用接收者是值类型的方法 p1.IncrAge2() fmt.Println(p1.GetAge()) }
标签:面试题,p1,age,接收者,golang,Person,类型,指针 From: https://www.cnblogs.com/wuchangblog/p/16654945.html