Golang:struct结构体方法中关于值接收者和指针接受者的区别1
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(结构体)的传递类型为值类型。当结构体方法中接收者为值接收者的话,相当于拷贝了一份数据,
这份数据与源数据并不是同一份数据;当结构体方法中接收者为指针接受者的话,相当于把源数据的地址传入,与源数据为同一份数据。
从上图的打印地址中看,很明显看出值接收者和指针接受者的区别。
*/
}