Структуры
Файлов в «Полке» прибавилось, и имя, размер, владелец и дата загрузки болтались по коду отдельными переменными. Сергей на планировании велел собрать их в одну структуру FileMeta и причесать все передачи.
структура собирает несколько значений под одним именем, копируется целиком при присваивании, а zero value структуры — это структура с zero value всех полей.
Определение и литерал
type FileMeta struct {
ID int
Name string
}
f := FileMeta{ID: 1, Name: "report_q3.pdf"}
Поля перечисляются по имени, тип у каждого свой. Создавать структуру принято литералом с именами полей: позиционный FileMeta{1, "report_q3.pdf"} работает, но его избегают — добавишь поле в середину, и всё разъедется по типам или перестанет компилироваться.
Структура — значение
Структура — это значение, как число или строка. При присваивании копируется целиком, со всеми полями:
f2 := f
f2.Name = "archive_2025.zip"
fmt.Println(f.Name) // report_q3.pdf — копия, оригинал не тронут
Zero value
Zero value структуры — структура, у которой все поля равны своим zero value. Никакого «null» нет:
var f FileMeta
fmt.Println(f) // {0 }
f.ID — 0, f.Name — пустая строка. Это значит, что структуры с нулевыми полями — рабочие значения, а не «отсутствие значения». Там, где нужна опциональность, используют указатель (урок).
Вы узнаете:
- как сравнивать структуры через
==при сравнимых полях - как теги структур (json, yaml) управляют сериализацией
Проверьте себя
type Point struct{ X, Y int }. Чему равны p1 := Point{X:1,Y:2}, p2 := Point{1,2} и var p3 Point?
Что такое zero value структуры?
Что происходит при присваивании структуры f2 := f?
правильных ответов
Структура — группа полей, значение, копируется целиком; zero value — все поля по нулям.
10 000 ₽ · 60 минут · онлайн