在访问struct fields 时,我不理解struct literal和struct pointer 之间的区别。有没有不同的内部行为?
type Person struct {
Name string
}
p := &Person{Name: "Alice"}
u := Person{Name: "Bob"}
fmt.Println(p.Name) // any difference ?
fmt.Println(u.Name) // any difference ?
我搜索了这个但发帖我发现所有关于价值与价值之间差异的解释指针,或“传递值”vs“将指针传递给方法”。它们不是我想知道的。
答案 0 :(得分:6)
u
是Person
类型的变量。 p
是"指向Person
"的类型的变量,并使用匿名("临时")对象的地址进行初始化。表达式p.Name
使用指针的自动解除引用,相当于(*p).Name
。 p
指向的对象只要p
指向该对象,然后可能会被Go的非确定性内存管理器销毁。
p.Name
和u.Name
都是string
类型的表达式,并且它们不会被指针"传递。因为他们的地址不在通话中。在fmt.Println
的情况下,该值实际上是通过接口"传递的。使用Go的结构子类型ad-hoc多态。