我有以下结构和:
type Person struct {
Name string
}
steve := Person{Name: "Steve"}
你能解释下面两种方法(一种没有指针,一种没有指针)都能打印p.Name吗?
func (p *Person) Yell() {
fmt.Println("Hi, my name is", p.Name)
}
func (p Person) Yell(){
fmt.Println("YELLING MY NAME IS", p.Name)
}
steve.Yell()
直接指向Person(不是实例史蒂夫?)
时,名称不存在吗?答案 0 :(得分:4)
两者都指向实例,但是每次调用函数时(p Person)
指向一个新副本,其中(p *Person)
将始终指向同一个实例。
检查this示例:
func (p Person) Copy() {
p.Name = "Copy"
}
func (p *Person) Ptr() {
p.Name = "Ptr"
}
func main() {
p1, p2 := Person{"Steve"}, Person{"Mike"}
p1.Copy()
p2.Ptr()
fmt.Println("copy", p1.Name)
fmt.Println("ptr", p2.Name)
}
另请阅读Effective Go,它是该语言的绝佳资源。