Map: создание, чтение, запись, удаление и проверка ключа
Содержание курса
Подсчёт частот токенов в map без инициализации отдельных ключей
Допустим, у вас есть срез токенов — слов, тегов, идентификаторов — и нужно посчитать, сколько раз встречается каждый:
tokens := []string{"go", "map", "go", "range", "go", "map"}
freq := make(map[string]int)
for _, t := range tokens {
freq[t]++
}
// freq: {"go": 3, "map": 2, "range": 1}
Ключевой момент — строка freq[t]++. Когда токен встречается впервые, ключа t в map ещё нет. freq[t] возвращает нулевое значение int, то есть 0. Затем ++ увеличивает его до 1, и пара сохраняется. При следующем вхождении того же токена ключ уже существует, и счётчик увеличивается с реального значения.
Никакой предварительной проверки if _, ok := freq[t]; !ok { freq[t] = 0 } не нужно — нулевое значение типа делает её избыточной. Это намеренное свойство map в Go, и паттерн freq[t]++ — стандартный способ агрегации.
После заполнения map можно обойти результат через range:
for word, count := range freq {
fmt.Printf("%s: %d\n", word, count)
}
Порядок вывода будет произвольным — что именно ожидать от range по map, вы уже знаете.
