Карты (словари, хеш-карты). Инициализировать карту можно буквально или с помощью функции make
.
// maps a string to an int m := make(map[string]int) n := map[string]int{"foo": 1, "bar": 2}
Мы получаем доступ к карте (с помощью ключа) и вставляем/обновляем значения, как показано ниже:
m["k1"] = 7
Мы можем удалить ключ методом delete
.
delete(m, "key1")
Мы можем получить размер карты, используя метод len
, то есть len(m)
.
Если мы обращаемся к несуществующему ключу, Go возвращает обнуленное значение. Есть 3 возможности, когда мы обращаемся к карте:
- Ключ существует
- Ключ не существует
- Ключ существует с нулевым значением или Ключ не существует, и поэтому возвращается обнуленное значение (неоднозначно)
Чтобы избежать двусмысленности в третьем случае, мы используем этот синтаксис: elem , ok := m[key]
. Возвращаемая переменная ok
является логическим типом, который указывает, присутствовал ли ключ или нет.
В нем нет порядка, итерация по карте не гарантирует какого-либо определенного порядка.
При передаче карт функции передается указатель карты. Изменение карты внутри функции изменит исходную карту.
Диапазон работы
Ключевое слово range
используется для перебора срезов и карт. Операция диапазона возвращает два значения для каждой итерации: первое — это индекс, а второе — элемент с этим индексом.
nums := []int{1, 2, 3, 4} sum := 0 // here we have ignored the first return value, the index for _, num := range nums { sum += num } kvs := map[string]string{"a": "apple", "b": "banana"} for k, v := range kvs { fmt.Printf("%s -> %s\n", k, v) }
Упражнение!
Создайте карту, выполните итерацию по ней с помощью операции диапазона и распечатайте их на консоли.
Первоначально опубликовано на https://rightfrombasics.com 29 декабря 2018 г.