Зачем собирать данные вместе
Если у посылки есть номер, вес и город доставки, три отдельные переменные легко перепутать. Структура задаёт один тип, который хранит эти связанные значения в именованных полях. Поле читают и меняют через точку.
Сначала объявляют тип с помощью 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: "жёлтый"}
В обычной программе именованный тип обычно проще передавать между функциями и использовать повторно.