Go за Прикладом: Мапи

Мапи це асоційований тип даних в Go (в інших мовах програмування, такі структури даних ще називають: хеш таблиця або словник).

package main
import (
    "fmt"
    "maps"
)
func main() {

Скориставшись функцією make: make(map[key-type]val-type), ми ініціюємо створення мапи.

    m := make(map[string]int)

Задати/Створити значенням можна за допомогою, вже знайомого, синтаксису доступу за індексом, де індекс це ключ, наприклад - name[key] = val.

    m["k1"] = 7
    m["k2"] = 13

Друкуючи мапу з fmt.Println ми побачимо усі існуючи пари ключ/значення, які належить мапі.

    fmt.Println("map:", m)

Отримати значення за ключем можна звернувшись до мапи за індексом name[key].

    v1 := m["k1"]
    fmt.Println("v1:", v1)

Якщо ключа не існує, нульове значення типу буде повернуто.

    v3 := m["k3"]
    fmt.Println("v3:", v3)

Функція len повертає кількість пар у мапі.

    fmt.Println("len:", len(m))

Функція delete видаляє пару ключ/значення з мапи.

    delete(m, "k2")
    fmt.Println("map:", m)

Щоб видалити усі пари ключ/значення з карти, скористайтесь clear.

    clear(m)
    fmt.Println("map:", m)

Необов’язкове друге значення, отримане під час запиту значення за ключем з мапи, покаже чи присутній даний ключ в мапі. Це стає в нагоді для перевірки існування ключів ( особливо ключів з нульовим значенням (наприклад 0 або "")). В цьому прикладі перевірки існування, нам непотрібно значення, а отже, ми ігноруємо його за допомогою пустого ідентифікатора _.

    _, prs := m["k2"]
    fmt.Println("prs:", prs)

Використовуючи наступний синтаксис ми можемо ініціалізувати мапу одним рядком.

    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)

Пакет maps містить корисні функції для мап.

    n2 := map[string]int{"foo": 1, "bar": 2}
    if maps.Equal(n, n2) {
        fmt.Println("n == n2")
    }
}

Note that maps appear in the form map[k:v k:v] when printed with fmt.Println.

$ go run maps.go
map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
map: map[]
prs: false
map: map[bar:2 foo:1]
n == n2

Наступний приклад: Діапазон.