访问struct字段时Golang结构文字和指针之间的区别

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)

我搜索了这个但发帖我发现所有解释了值和指针之间的区别,或者"传递值"与"传递指针"到方法.他们不是我想知道的.

Ker*_* SB 7

u是一个类型的变量Person.p是"指向Person" 的类型的变量,它使用匿名("临时")对象的地址进行初始化.表达式p.Name使用指针的自动解除引用,相当于(*p).Name.p指向生命的对象只要p指向它,然后可能被Go的非确定性内存管理器破坏.

这两个p.Nameu.Name的类型的表达式string,而他们没有"的指针传递",因为他们的地址不来电的.在这种情况下fmt.Println,该值实际上是使用Go的ad-hoc多态的结构子类型形式"通过接口"传递的.