Структуры в Go
Теория: Структуры в срезах и картах
В реальных программах редко обрабатывается одна сущность. Обычно приходится работать с множеством: список заказов, множество пользователей, каталог товаров. Чтобы хранить и организовывать такие данные, в Go есть срезы и карты. А если их элементами становятся структуры, мы получаем естественные и удобные модели.
Срезы
Срез — это упорядоченный список элементов. Он удобен, когда важен порядок или нужно пройтись по всем объектам.
Начнем с простого: список имен пользователей.
Здесь []string — это срез строк. Мы видим порядок, можем обратиться к элементу по индексу (users[0] даст "Анна") и пройтись по всем в цикле.
Карты
Карта — это набор пар «ключ → значение». Мы используем ее, когда порядок не важен, а быстрый доступ по ключу критичен.
Простейший пример: справочник паролей по логину.
Здесь map[string]string — это карта, где ключом выступает логин, а значением — пароль. Доступ по ключу мгновенный, перебор не нужен.
Срезы структур
Теперь усложним задачу. Представим систему заказов и определим структуру Order:
Создадим срез заказов:
Все данные собраны в единую модель, нет риска рассинхронизации между отдельными срезами.
Карты со структурами
Чтобы быстро находить заказ по ID, используем карту:
Карта позволяет получать заказ напрямую, без перебора.
Структуры как ключи карт
Иногда сама структура может быть ключом. Например, оценки студентов по имени и возрасту:
Важно: ключ не может содержать несравнимые типы — такие как срезы или карты.
Комбинации
На практике часто встречаются вложенные варианты:
- срез внутри структуры, которая хранится в карте;
- карта внутри структуры, которая лежит в срезе;
- карта, где значением является срез структур;
- срез структур, внутри которых есть срезы.
Когда использовать
- Срез — когда нужен порядок и обход всех элементов.
- Карта — когда важен быстрый доступ по ключу и порядок не имеет значения.
На практике оба механизма комбинируются: срез для отображения и сортировки, карта для поиска и проверки существования.
И только когда мы соединяем структуры со срезами и картами, мы получаем мощные и гибкие модели данных. Например, список всех заказов (срез структур) или база клиентов, где каждому email соответствует карточка клиента (карта структур).


