- Определение карты
- Создание карты
- Обращение к элементам
- Проверка существования ключа
- Удаление элемента
- Размер карты
Карты (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