package main import "fmt" type Person struct { //定义一个Person结构体 Name string //定义一个string类型的Name字段 } func (p Person) CheckInfo1() { //定义一个Person结构体的方法,接收者类型为值接收者(因为p的类型为Person) fmt.Printf("%p\n", &p) //打印值接收者类型p的地址 } func (p *Person) CheckInfo2() { //定义一个Person结构体的方法,接收者类型为指针接收者(因为p的类型为Person) fmt.Printf("%p\n", p) //打印指针接收者类型p的地址 } func main() { p := Person{ //初始化一个Person结构体的实例化对象p Name: "root", } fmt.Printf("%p\n", &p) //打印地址,结果为0xc00004e250 p.CheckInfo1() //打印地址,结果为0xc00004e260 p.CheckInfo2() //打印地址,结果为0xc00004e250 /* 由此引发结论:在Golang中,struct(结构体)的传递类型为值类型。当结构体方法中接收者为值接收者的话,相当于拷贝了一份数据, 这份数据与源数据并不是同一份数据;当结构体方法中接收者为指针接受者的话,相当于把源数据的地址传入,与源数据为同一份数据。 从上图的打印地址中看,很明显看出值接收者和指针接受者的区别。 */ }