Go в примери: Карти

Картите са вградения в Go вид за съединени съответствия1"име": "стойност", понякога наричани хешове или речници в други езици.


  1. maps – съединени двойки, асоциативни масиви https://bg.wikipedia.org/wiki/Асоциативен_масив
package main
import (
    "fmt"
    "maps"
)
func main() {

За да създадете празна карта, използвайте вградената функция make: make(map[видключ]видстойност).

    m := make(map[string]int)

Задайте двойки ключ/стойност като напишете име[ключ] = стойност

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

fmt.Println ще ни покаже всички двойки ключ/стойност от картата.

    fmt.Println("карта:", m)

Вземете стойност, като напишете име[ключ].

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

Ако ключът не съществува, ще получим нулевата стойност за вида данни на съответната стойност1.


  1. https://go.dev/ref/spec#Thezerovalue
    v3 := m["k3"]
    fmt.Println("v3:", v3)

Когато бъде извикана върху карта, вградената функция len връща броя на двойките ключ/стойност.

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

Вградената функция delete премахва двойки от картата, като укажем ключа.

    delete(m, "k2")
    fmt.Println("карта:", m)

За да премахнете всички двойки, използвайте вградената функция clear.

    clear(m)
    fmt.Println("карта:", m)

Незадължителната втора връщана стойност, когато вземаме стойност чрез указване на ключ от карта, показва дали ключът съществува в картата. Това може да се използва, когато искаме да знаем, дали стойността е наистина с нулева стойност, като 0, false или "", или просто не съществува.

Тук не ни е нужна самата стойност и затова я пренебрегваме като ползваме празното име за променлива _1.


  1. blank identifier – празно наименование
    _, същ := m["k2"]
    fmt.Println("съществува:", същ)

Също така можете да обявите и наченете карта едновременно, като напишете следното.

    n := map[string]int{"ала": 1, "бала": 2}
    fmt.Println("карта:", n)

Пакетът maps съдържа набор от полезни функции за работа с карти.

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

Забележете, че картите биват показани във вида map[k:v k:v] при употреба на fmt.Println.

$ go run maps.go
карта: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
карта: map[k1:7]
карта: map[]
съществува: false
карта: map[ала:1 бала:2]
n == n2

Следващ пример: .