← Все этапы
03 · ДАННЫЕ И ТИПЫУрок 12 из 3320 минут

Структуры и поля

Объединяем связанные значения в собственный тип и работаем с его полями.

Зачем собирать данные вместе

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

Сначала объявляют тип с помощью type и struct. Для создания значения удобно указывать имена полей: порядок тогда не важен, а пропущенные поля получают нулевые значения своего типа. У int это 0, у string — пустая строка, у bool — false. Короткая запись без имён полей требует перечислить значения в объявленном порядке.

Пример

package main

import "fmt"

type parcel struct {
	code   string
	weight int
	city   string
}

func main() {
	item := parcel{code: "PK-204", city: "Казань"}
	item.weight = 850
	fmt.Printf("%s: %d г, %s\n", item.code, item.weight, item.city)
}

В программе поле weight сначала равно нулю, затем получает новое значение.

Фрагмент: анонимная структура

Для одноразовой локальной записи можно создать структуру прямо в функции, не вводя отдельный именованный тип. Такой фрагмент размещается внутри функции main. Запись всё равно имеет конкретный набор полей, а её сокращённая инициализация должна соответствовать этому набору.

label := struct {
	text  string
	color string
}{text: "Осторожно", color: "жёлтый"}

В обычной программе именованный тип обычно проще передавать между функциями и использовать повторно.

Практика

Попробуйте сами

Создай тип book с полями title (строка), pages (целое) и read (логическое). В main создай книгу с названием «Go по делу» и 120 страницами, не указывая поле read. Выведи значения всех полей, затем пометь книгу прочитанной и выведи read ещё раз.

Проверка результата

Как понять, что получилось

До изменения программа показывает название «Go по делу», число страниц 120 и read == false; после присваивания read = true последнее значение становится true. Поля задаются именами при создании, а доступ к ним выполняется через точку.

Структуры и поля | Go | WebSchool · Go