Найти в Дзене
PurpleSchool

Полное руководство для начинающих по Мапам в Go

Мапы — это встроенный тип данных в Go, который представляет собой ассоциативный массив или хеш-таблицу. Они позволяют хранить пары "ключ-значение", где каждому уникальному ключу соответствует определенное значение. Вот простой пример объявления мапы, где ключи — строки, а значения — целые числа: Мапы очень удобны, когда нужно быстро находить значения по ключу. В отличие от слайсов, где доступ к элементам осуществляется по числовому индексу, в мапах мы используем ключи, которые могут быть разных типов. Далее мы подробно разберем, как создавать, изменять и работать с мапами в Go. В конце статья я также оставил вам блок бесплатных материалов для обучения разработке. Есть несколько способов создать мапу в Go. Самый простой — использовать встроенную функцию make(): Эта запись создает пустую мапу ages, где ключи — строки, а значения — целые числа. Другой способ — с помощью литерала мапы: Здесь мы создаем мапу ages и сразу заполняем ее парами ключ-значение. Каждая пара указывается через двоет
Оглавление

Что такое мапы в Go?

Мапы — это встроенный тип данных в Go, который представляет собой ассоциативный массив или хеш-таблицу. Они позволяют хранить пары "ключ-значение", где каждому уникальному ключу соответствует определенное значение. Вот простой пример объявления мапы, где ключи — строки, а значения — целые числа:

Здесь ages - это мапа, где ключи имеют тип string (строка), а значения - int (целое число).
Здесь ages - это мапа, где ключи имеют тип string (строка), а значения - int (целое число).

Мапы очень удобны, когда нужно быстро находить значения по ключу. В отличие от слайсов, где доступ к элементам осуществляется по числовому индексу, в мапах мы используем ключи, которые могут быть разных типов.

Далее мы подробно разберем, как создавать, изменять и работать с мапами в Go. В конце статья я также оставил вам блок бесплатных материалов для обучения разработке.

Создание мап

Есть несколько способов создать мапу в Go. Самый простой — использовать встроенную функцию make():

-3

Эта запись создает пустую мапу ages, где ключи — строки, а значения — целые числа. Другой способ — с помощью литерала мапы:

-4

Здесь мы создаем мапу ages и сразу заполняем ее парами ключ-значение. Каждая пара указывается через двоеточие ключ: значение и отделяется запятыми. Важно понимать, что мапа — это ссылочный тип. Когда вы присваиваете одну мапу другой, они обе указывают на одни и те же базовые данные. Изменения в одной мапе будут видны в другой.

-5

В этом примере изменение значения по ключу "Alice" в ages2 также меняет значение в исходной мапе ages1, так как обе мапы ссылаются на одни и те же данные.

Мапы являются фундаментальной структурой данных в Go, и их понимание необходимо для эффективной работы с данными. Однако, чтобы в полной мере использовать возможности мап, требуется уверенное владение основами языка, понимание типов данных, указателей и работы с памятью. Если вы хотите детальнее погрузиться в основы Go — приходите на наш большой курс Основы Golang. На курсе 193 урока и 16 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.

Работа с мапами

Добавление и изменение элементов

Чтобы добавить новую пару ключ-значение в мапу или изменить значение по существующему ключу, используйте оператор индексирования []:

В этом коде ["Alice"] - это ключ. Если такого ключа в мапе еще нет, то будет добавлена новая пара ключ-значение. Если ключ уже существует, значение по нему будет перезаписано.
В этом коде ["Alice"] - это ключ. Если такого ключа в мапе еще нет, то будет добавлена новая пара ключ-значение. Если ключ уже существует, значение по нему будет перезаписано.

Получение элементов

Чтобы получить значение по ключу, также используйте оператор [], указав нужный ключ:

Здесь мы получаем значение по ключу "Alice", которое равно 25.
Здесь мы получаем значение по ключу "Alice", которое равно 25.

Важно учитывать, что при обращении к несуществующему ключу вы получите нулевое значение типа значений в мапе. Для int это будет 0.

-8

Чтобы отличить нулевое значение от несуществующего ключа, используйте идиому присваивания из двух значений:

-9

В этом примере ok — булева переменная, которая будет равна true, если ключ существует в мапе, и false - если нет.

Перебор элементов

Чтобы перебрать все элементы мапы, используйте цикл for с оператором range:

-10

На каждой итерации цикла переменная name будет содержать очередной ключ, а age — соответствующее ему значение. Порядок перебора элементов мапы не гарантируется и может меняться от запуска к запуску программы. Если порядок важен, соберите ключи в отдельный слайс, отсортируйте его и затем перебирайте мапу по отсортированным ключам.

Удаление элементов

Чтобы удалить пару ключ-значение, воспользуйтесь встроенной функцией delete():

-11

Эта запись удаляет из мапы ages элемент с ключом "Alice". Если такого ключа нет, ничего не произойдет.

Другие операции с мапами

Проверка на пустоту

Чтобы проверить мапу на пустоту, используйте встроенную функцию len():

-12

Если len() возвращает 0, значит мапа пуста.

Сравнение мап

В Go нельзя напрямую сравнивать мапы через ==. Единственное сравнение - проверка на nil:

-13

Если нужно сравнить содержимое двух мап, придется перебрать их элементы и сравнить по отдельности.

Мапы как значения

Значениями в мапе могут быть не только простые типы вроде строк и чисел, но и другие мапы или структуры. Пример "мапы мап":

-14

Здесь groups — это мапа, где ключи - строки (названия групп), а значения - другие мапы (словари участников с их возрастом).

Заключение

Умение работать с мапами пригодится в самых разных задачах — от простого подсчета слов до построения сложных ассоциативных структур. Помните также про особенности мап. Ключи должны быть сравнимыми типами. Мапы — ссылочный тип, изменения в копии влияют на оригинал. При обращении к несуществующему ключу возвращается нулевое значение типа. Порядок перебора элементов не гарантирован.

Теперь вы знаете, как объявлять, изменять и перебирать мапы в Go. Пробуйте использовать их в своих программах и экспериментируйте с разными типами ключей и значений. С мапами ваш Go-код станет в разы эффективнее.

Работа с мапами в Go часто требует решения задач по сериализации и десериализации данных, особенно при работе с JSON или другими форматами. Чтобы эффективно выполнять эти операции, необходимо понимать принципы работы с интерфейсами, reflection и стандартной библиотекой Go. Глубокое погружение в эти темы доступно в нашем курсе Основы Golang. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Go прямо сегодня.

Бесплатные полезности

1. Смотрите видео: код-ревью, собеседования и новости разработки на нашем Дзене – https://dzen.ru/purpleschool?tab=longs

2. Создайте личный план обучения и получите доступ к базе из 500+ бесплатных уроков в бесплатных картах развития на нашем сайте – https://purpleschool.ru/skills

3. Разберитесь в том, как устроен мир IT на бесплатном курсе «Основы разработки» – https://purpleschool.ru/course/code-basics