在访问struct字段时,我不理解struct literal和struct指针之间的区别.有没有不同的内部行为?
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 ?
我搜索了这个但发帖我发现所有解释了值和指针之间的区别,或者"传递值"与"传递指针"到方法.他们不是我想知道的.
u
是一个类型的变量Person
.p
是"指向Person
" 的类型的变量,它使用匿名("临时")对象的地址进行初始化.表达式p.Name
使用指针的自动解除引用,相当于(*p).Name
.p
指向生命的对象只要p
指向它,然后可能被Go的非确定性内存管理器破坏.
这两个p.Name
和u.Name
的类型的表达式string
,而他们没有"的指针传递",因为他们的地址不来电的.在这种情况下fmt.Println
,该值实际上是使用Go的ad-hoc多态的结构子类型形式"通过接口"传递的.