package main import "fmt" type Person struct { Name string } func (p Person) test1() { p.Name = "www.gopher.cc" fmt.Println(p.Name) } func (p *Person) test2() { p.Name = "www.gopher.cc" fmt.Println(p.Name) } func main() { p := new(Person) // 此处p为指针类型 p.Name = "gopher.cc" p.test1() // 形式上传入的是指针,实际上却是值拷贝 fmt.Println(p.Name) p2 := Person{} // 此处为值类型 p2.Name = "gopher.cc" p2.test2() // 形式上传入的是值类型,实际上是却是地址拷贝 fmt.Println(p2.Name) }
总结:
- 不管调用形式如何,真正决定是值拷贝还是地址拷贝,看这个方法是和哪种类型绑定;
- 如果是和值类型绑定,比如 (p Person) , 则是值拷贝;如果是和指针类型绑定,比如是(p *Person) 则是地址拷贝。
一条评论
来看看!