Материал проходит вычитку — возможны неточности.
Урок 33 из 118

Структуры

Файлов в «Полке» прибавилось, и имя, размер, владелец и дата загрузки болтались по коду отдельными переменными. Сергей на планировании велел собрать их в одну структуру 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) управляют сериализацией
Задание · вопросы

Проверьте себя

Вопрос 1 из 3

type Point struct{ X, Y int }. Чему равны p1 := Point{X:1,Y:2}, p2 := Point{1,2} и var p3 Point?

Вопрос 2 из 3

Что такое zero value структуры?

Вопрос 3 из 3

Что происходит при присваивании структуры f2 := f?

Итоги

Структура — группа полей, значение, копируется целиком; zero value — все поля по нулям.

Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки