我在学习 Golang 时,遇到了讲解结构体的章节,其中介绍了不同的结构体初始化方法。
p1 := passport{}
var p2 passport
p3 := passport{
Photo: make([]byte, 0, 0),
Name: "Scott",
Surname: "Adam",
DateOfBirth: "Some time",
}
fmt.Printf("%s\n%s\n%s\n", p1, p2, p3)
虽然这些代码会打印结构的值,如
{ }
{ }
{ Scott Adam Some time}
但下面的代码由于是引用,所以会带有一个&符号。
pointerp1 := &p3
fmt.Printf("%s", pointerp1)
pointerp2 := new(passport)
pointerp2.Name = "Anotherscott"
fmt.Printf("%s", pointerp2)
&{ Scott Adam 一些时间 }&{ 另一个Scott }
请帮我解答我的疑问。
在使用
pointerp1 := &p3
时,pointerp1
是对p3
的引用变量,它保存实际数据。同样,对于pointerp2
来说,保存数据的实际变量是什么?在哪些情况下最好使用这些不同类型的初始化?