Структуры и указатели: объявление, инициализация и передача по адресу
Содержание курса
До этого момента все данные, с которыми работали функции, были скалярными значениями или срезами. Структуры дают возможность собрать несколько полей разных типов в один именованный тип — и сразу поднимают вопрос о том, что происходит с этим набором данных при передаче в функцию.
Объявление struct и нулевые значения полей
Структура в Go — это способ ввести новый тип, который объединяет несколько полей под одним именем. Объявление выглядит так:
type Person struct {
Name string
Age int
Score float64
Active bool
}
type Person struct { ... } регистрирует Person как самостоятельный тип в пакете. После этого Person можно использовать везде, где допустим любой другой тип: как тип переменной, параметра функции, поля другой структуры.
Каждое поле имеет имя и тип — они могут быть любыми: string, int, float64, bool, другая структура. Нет требования, чтобы типы совпадали.
Что происходит, если просто объявить переменную такого типа без явной инициализации?
var p Person
fmt.Println(p.Name) // ""
fmt.Println(p.Age) // 0
fmt.Println(p.Score) // 0
fmt.Println(p.Active) // false
Go инициализирует каждое поле нулевым значением своего типа: string — пустая строка, числовые типы — 0 или 0.0, bool — false. Это не «мусор из памяти», а гарантия языка: нулевое значение структуры всегда определено.
Практически это означает: если вы забыли заполнить поле, вы не получите случайные данные — вы получите предсказуемый ноль. Иногда это ровно то, что нужно; иногда — источник трудноуловимого бага, когда программа молчит, а поле тихо остаётся пустым.
