Структура основ Голанга и ключевое слово 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?

Каковы наилучшие сценарии использования этих различных типов инициализации?

Ответы на вопрос(0)

Ваш ответ на вопрос