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