Структура основ Голанга и ключевое слово new ()
Я изучал 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 Some time}&{ Anotherscott }
Пожалуйста, помогите мне с моими сомнениями.
в использованииpointerp1 := &p3
, pointerp1
является ссылочной переменной дляp3
, который содержит фактические данные. Точно так же, что было бы фактической переменной, которая содержит данные дляpointerp2
?
Каковы наилучшие сценарии использования этих различных типов инициализации?