cpp

Создание экземпляра структуры

На основе структуры можно создать множество объектов (экземпляров структуры). При этом для каждого объекта создается свой набор локальных переменных. Объявление переменной имеет следующий формат:

var <Переменная> <Название структуры>[ = 
    <Название структуры>{[<Значение 1>, ..., <Значение N>]}]

Пример объявления переменной с типом Point:

var obj Point
fmt.Println(obj) // {0 0}

В этом случае поля получат значение по умолчанию для типа. Напомню, что для числовых типов значением по умолчанию является 0, для строк — пустая строка, для указателей — значение nil.

При объявлении полям структуры можно присвоить начальные значения. Для этого после объявления указывается оператор =, далее внутри фигурных скобок перечисляются значения через запятую. Порядок следования значений должен совпадать с порядком следования полей при объявлении структуры. Количество значений должно совпадать с количеством полей структуры. Пример инициализации структуры:

var obj Point = Point{10, 20}
fmt.Println(obj) // {10 20}

При выводе структуры по умолчанию отображаются только значения через пробел внутри фигурных скобок. Чтобы дополнительно отобразить названия полей, следует использовать спецификатор %+v. Чтобы дополнительно вывести название структуры можно воспользоваться спецификатором %#v:

fmt.Printf("%v\n", obj)  // {10 20}
fmt.Printf("%+v\n", obj) // {X:10 Y:20}
fmt.Printf("%#v\n", obj) // main.Point{X:10, Y:20}

Чтобы всем полям присвоить значения по умолчанию достаточно указать пустые фигурные скобки:

var obj Point = Point{}
fmt.Println(obj)         // {0 0}

Можно также воспользоваться следующим форматом объявления переменной:

var <Переменная> <Название структуры> =
                 <Название структуры>{
   <Название поля 1>: <Значение 1>,
   ...
   <Название поля N>: <Значение N>,
}

В этом случае порядок следования полей не имеет значения:

var obj Point = Point{
   Y: 20,
   X: 10, // Завершающая запятая обязательна!
}
fmt.Println(obj)         // {10 20}
fmt.Printf("%+v\n", obj) // {X:10 Y:20}

Кроме того, в этом случае можно присвоить значения только отдельным полям, а не всем. Не указанные поля получат значения по умолчанию:

var obj Point = Point{Y: 20}
fmt.Println(obj)         // {0 20}
fmt.Printf("%+v\n", obj) // {X:0 Y:20}

Если выполняется инициализация, то тип данных можно не указывать:

var obj = Point{X: 10, Y: 20}
fmt.Println(obj)         // {10 20}
fmt.Printf("%+v\n", obj) // {X:10 Y:20}

Можно также использовать сокращенный формат объявления локальной переменной:

obj := Point{X: 10, Y: 20}
fmt.Println(obj)         // {10 20}
fmt.Printf("%+v\n", obj) // {X:10 Y:20}

Мы можем создать множество экземпляров структуры Point, и каждый экземпляр будет иметь свои собственные значения полей X и Y, не зависящие от других экземпляров:

obj1 := Point{X: 10, Y: 20}
fmt.Println(obj1) // {10 20}
obj2 := Point{X: 30, Y: 40}
fmt.Println(obj2) // {30 40}

Экземпляр структуры можно присвоить другой переменной с помощью оператора =. В этом случае копируются значения всех полей структуры. Пример:

obj1 := Point{X: 10, Y: 20}
obj2 := obj1
obj2.X = 88
fmt.Println(obj1) // {10 20}
fmt.Println(obj2) // {88 20}

Учебник Go (Golang)
Учебник Go (Golang) в формате PDF

Помощь сайту

ЮMoney (Yandex-деньги): 410011140483022

ПАО Сбербанк:
Счет: 40817810855006152256
Реквизиты банка:
Наименование: СЕВЕРО-ЗАПАДНЫЙ БАНК ПАО СБЕРБАНК
Корреспондентский счет: 30101810500000000653
БИК: 044030653
КПП: 784243001
ОКПО: 09171401
ОКОНХ: 96130
Скриншот реквизитов

cpp