7 вопросов
Map в Go - встроенная хеш-таблица для хранения пар ключ-значение. Ключевые особенности: отсутствие гарантированного порядка, panic при записи в nil map, ограничения на типы ключей.
Чтение из nil map безопасно (вернёт zero value), но запись вызывает panic: assignment to entry in nil map. Перед записью map нужно инициализировать: m := make(map[string]int) или m := map[string]int{}.
Подробнее →var m map[string]int; fmt.Println(m["key"])? 🟡 Средний
▶
Чтение из nil map не вызывает panic - возвращается zero value типа значения. Для int это 0. Это поведение одинаково для nil map и для отсутствующего ключа в инициализированной map.
Подробнее →Встроенная функция len() работает с map, строками, слайсами, массивами и каналами. У map нет методов .length() или .size() - Go предпочитает встроенные функции методам.
Подробнее →Идиома «comma ok»: если ключ существует, ok = true, v - значение. Если нет, ok = false, v - zero value. В Go нет оператора in (как в Python) или метода .has().
Подробнее →Go намеренно рандомизирует порядок итерации по map, чтобы программисты не полагались на него. Если нужен порядок - отсортируйте ключи отдельно или используйте слайс пар.
Подробнее →Встроенная функция delete(m, key) удаляет элемент. Безопасно вызывать для несуществующего ключа или nil map - просто ничего не произойдёт. Не возвращает значений.
Подробнее →Ключи map должны быть сравнимыми (поддерживать ==). Слайсы несравнимы, поэтому не могут быть ключами. Массивы - могут ([3]int сравним). Структуры - только если все поля сравнимы.
Подробнее →