Зарегистрируйтесь, чтобы продолжить обучение

Карты Основы Go

Карты (map) — это встроенный тип данных в Go для хранения пар «ключ-значение». Они позволяют быстро находить, добавлять и удалять данные по ключу. Карты используются везде, где нужен ассоциативный массив или словарь.

Определение карты

Карту можно объявить без инициализации:

var ages map[string]int

Здесь map[string]int — это тип карты, где:

  • Ключ имеет тип string.
  • Значение имеет тип int.

Ключами в Go могут быть любые типы данных, которые сравнимы (comparable). Это значит, что они могут использоваться в операциях == и !=. Это могут быть строки, числа, булевы значения, массивы фиксированной длины и структуры со сравниваемыми полями. Срезы, карты и функции не могут быть ключами, так как они не поддерживают сравнение.

Создание карты

При объявлении карта равна nil.

var ages map[string]int
fmt.Println(ages == nil) // => true

Чтобы начать её использовать, необходимо явно выделить память с помощью make():

ages := make(map[string]int)
fmt.Println(ages == nil) // => false

ages["Alice"] = 25
ages["Bob"] = 30
fmt.Println(ages) // => map[Alice:25 Bob:30]

Можно создать карту и сразу инициализировать её значениями через литерал:

scores := map[string]int{
    "Tom":  90,
    "Jack": 80,
}
fmt.Println(scores) // => map[Jack:80 Tom:90]

Обращение к элементам

Чтобы получить значение по ключу, используется синтаксис map[key]:

fmt.Println(ages["Alice"]) // => 25

Если обратиться к несуществующему ключу, будет возвращено значение по умолчанию для типа, например 0 для чисел или пустая строка для string:

// ключа "Charlie" нет
fmt.Println(ages["Charlie"]) // => 0

Проверка существования ключа

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

age, exists := ages["Charlie"]
fmt.Println(age, exists) // => 0 false

Переменная exists будет true, если ключ найден, и false — если нет.

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

Удалить элемент из карты можно с помощью встроенной функции delete():

delete(ages, "Alice")
fmt.Println(ages) // => map[Bob:30]

Если ключа нет, delete() просто ничего не делает.

Размер карты

Чтобы узнать количество элементов в карте, используется len():

fmt.Println(len(ages)) // => 1

Дополнительные материалы

  1. Effective Go — Maps
  2. Map

Открыть доступ

Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно

  • 130 курсов, 2000+ часов теории
  • 1000 практических заданий в браузере
  • 360 000 студентов
Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Наши выпускники работают в компаниях:

Логотип компании Альфа Банк
Логотип компании Aviasales
Логотип компании Yandex
Логотип компании Tinkoff