cpp

Указатели на структуры и поля

Объявление указателя на структуру выглядит следующим образом:

var <Переменная> *<Структура> = &<Экземпляр структуры>

Пример:

type Point struct {
   X, Y int
}
obj := Point{10, 20}
var p *Point = &obj
fmt.Println(p)         // &{10 20}
fmt.Printf("%v\n", p)  // &{10 20}
fmt.Printf("%#v\n", p) // &main.Point{X:10, Y:20}

Получить доступ к членам структуры через указатель можно двумя способами:

// Способ 1
p.X = 30
fmt.Println(p.X)    // 30
// Способ 2
(*p).Y = 40
fmt.Println((*p).Y) // 40
fmt.Println(obj)    // {30 40}

Первый способ является синтаксическим сахаром для второго способа. В этом случае разыменование указателя производится автоматически. Обратите внимание на то, что во втором способе разыменование указателя выполняется внутри круглых скобок и только потом производится доступ к полю. Если круглые скобки убрать, то сначала будет выполнен доступ к полю с автоматическим разыменованием указателя, а затем произойдет разыменование значения, не являющегося указателем, что приведет к ошибке.

Можно создать указатель на литерал структуры:

type Point struct {
   X, Y int
}
var p *Point = &Point{10, 20}
fmt.Println(p) // &{10 20}

Объявить указатель можно не только на всю структуру целиком, но и на отдельное поле структуры:

var <Переменная> *<Тип> = &<Экземпляр структуры>.<Название поля>

Пример:

var pX *int = &obj.X
*pX = 50
fmt.Println(*pX)    // 50
fmt.Println(obj)    // {50 40}

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

Помощь сайту

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

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

cpp