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) 则是地址拷贝。
一条评论
来看看!