Урок объясняет, как работает тип map в Go как полноценная хеш-таблица: хранение данных в формате ключ–значение, хеширование, доступ за O(1), добавление, удаление, проверка существования и особенности итерации.
Хеш-таблицы - один из самых удобных и быстрых способов хранения данных
в формате «ключ--значение». В Go этот тип структуры реализован через
map, и он работает как полноценная hash map.
Хеш-таблица (hash map) - это структура данных, которая:
В Go тип map - это полноценная хеш-таблица.
make():myMap := make(map[string]int)
myMap := map[string]int{
"item 1": 1,
"item 2": 2,
"item 3": 3,
}
myMap["favorite number"] = 5
Если ключа не было - он создаётся. Если ключ был - значение перезаписывается.
fav := myMap["favorite number"]
missing := myMap["age"] // zero value — 0
Так как map - хеш-таблица, поиск происходит очень быстро.
Стандартная идиома:
price, found := myMap["price"]
if !found {
fmt.Println("price not found")
}
found == false означает, что ключа в таблице нет.
delete(myMap, "favorite number")
for key, value := range myMap {
fmt.Println(key, value)
}
⚠ Порядок обхода НЕ гарантируется, так как элементы распределены по хеш-бакетам.
Потому что Go использует:
Поэтому порядок может меняться между запусками программы.
Ключи должны быть сравнимыми, то есть Go должен иметь возможность:
==,Можно использовать: - string
Нельзя использовать: - срезы ([]T) - карты (map) - функции
map в Go --- это полноценная хеш-таблица.make().