Доступ по ключу
Карта связывает уникальные ключи со значениями: например, код кабинета с его вместимостью. Тип задаёт оба типа данных, как в map[string]int. Пустую карту можно создать литералом или функцией make; нулевая карта равна nil, читать из неё можно, но попытка записи вызывает панику.
Запись и чтение используют квадратные скобки. Если ключ отсутствует, чтение возвращает нулевое значение типа элемента. Чтобы отличить отсутствующий ключ от существующей записи со значением 0, используй второе значение: value, ok := rooms["B-12"]. Удаляет пару встроенная функция delete.
Порядок обхода карты не определён. Если порядок важен для вывода, собери ключи в срез, отсортируй его и затем читай карту по отсортированным ключам.
Пример
package main
import (
"fmt"
"sort"
)
func main() {
rooms := map[string]int{"A-1": 12, "B-2": 0, "C-3": 8}
rooms["D-4"] = 16
capacity, found := rooms["B-2"]
fmt.Printf("B-2: %d, найден: %t\n", capacity, found)
delete(rooms, "C-3")
codes := make([]string, 0, len(rooms))
for code := range rooms {
codes = append(codes, code)
}
sort.Strings(codes)
for _, code := range codes {
fmt.Printf("%s: %d\n", code, rooms[code])
}
}
Ключ B-2 присутствует, хотя его значение равно нулю, поэтому found будет true. Удалённого ключа C-3 среди строк не будет. Сортировка делает оставшийся вывод повторяемым.
Для подсчётов карта удобна тем, что чтение несуществующего целочисленного ключа даёт 0: выражение counts[word]++ создаёт первую запись со значением 1.