Go Academy · leksjon

Maps: nøkkel-verdi-lagre

Opprette, lese, skrive og slette map-oppføringer

Leksjon 3 av 413 trinn

Maps: nøkkel-verdi-lagre er en gratis leksjon i Go Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Go Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Go Academy inneholder totalt 4 leksjoner.

Hva er et map?

Et map i Go er en uordnet samling av nøkkel–verdi-par. Nøkler må ha en sammenlignbar type (strenger, heltall og så videre). Maps er referansetyper som støttes av en hashtabell.

Opprette maps

Bruk en literal eller make:

package main
import "fmt"

func main() {
    ages  := map[string]int{"Alice": 30, "Bob": 25}
    cache := make(map[string]string)
    fmt.Println(ages, cache)
}

Lese og skrive

Hent verdier med m[key], og tilordne med m[key] = value. Hvis du leser en nøkkel som mangler, returneres nullverdien:

package main
import "fmt"

func main() {
    m := map[string]int{}
    m["hits"] = 10
    m["hits"]++
    fmt.Println(m["hits"])    // 11
    fmt.Println(m["missing"]) // 0
}

Kontrollere om en nøkkel finnes

To-verdi-formen skiller en manglende nøkkel fra en nullverdi:

package main
import "fmt"

func main() {
    m := map[string]int{"a": 0}
    v, ok := m["a"]
    fmt.Println(v, ok) // 0 true
    v2, ok2 := m["z"]
    fmt.Println(v2, ok2) // 0 false
}

Slette oppføringer

Bruk den innebygde funksjonen delete. Det skjer ingenting når du sletter en nøkkel som ikke finnes:

package main
import "fmt"

func main() {
    m := map[string]int{"x": 1, "y": 2}
    delete(m, "x")
    delete(m, "z") // no-op
    fmt.Println(m) // map[y:2]
}

Iterere over et map

Bruk range for iterasjon. Rekkefølgen er ikke garantert:

package main
import "fmt"

func main() {
    scores := map[string]int{"Alice": 90, "Bob": 85}
    for name, score := range scores {
        fmt.Printf("%s: %d\n", name, score)
    }
}

Maps med struct-verdier

Maps kan ha structer som verdier. Oppdater via en midlertidig variabel (structer i maps kan ikke adresseres):

package main
import "fmt"

type Point struct{ X, Y int }

func main() {
    points := map[string]Point{"A": {1, 2}}
    p := points["A"]
    p.X = 99
    points["A"] = p
    fmt.Println(points["A"]) // {99 2}
}

nil-maps

Et nil-map leses som et tomt map (nullverdier), men skriving til et nil-map utløser panic:

package main

func main() {
    var m map[string]int
    _ = m["key"]   // ok — returns 0
    // m["key"] = 1 // PANIC: assignment to nil map
}

Maps er ikke trygge for samtidig bruk

Go sitt innebygde map er ikke trygt å bruke fra goroutiner. Samtidige lesinger er i orden, men samtidige skrivinger (eller lesing og skriving samtidig) krever en mutex eller sync.Map:

package main
import "sync"

func main() {
    var mu sync.Mutex
    m := map[string]int{}
    mu.Lock()
    m["key"] = 1
    mu.Unlock()
    _ = m
}

Telle frekvenser

Et klassisk map-mønster – å telle forekomster:

package main
import "fmt"

func main() {
    words := []string{"go", "is", "fast", "go", "is", "go"}
    freq := map[string]int{}
    for _, w := range words {
        freq[w]++
    }
    fmt.Println(freq) // map[fast:1 go:3 is:2]
}

Rask sjekk

Hva skjer når du leser en nøkkel som ikke finnes i et Go-map?

Oppsummering: Maps

Dette er det viktigste:

  • Maps er uordnede lager for nøkkel–verdi-par
  • Bruk to-verdi-formen for å kontrollere om en nøkkel finnes
  • Skriv aldri til et nil-map
  • Iterasjonsrekkefølgen er tilfeldig – sorter nøklene ved behov
  • Beskytt maps med en mutex i samtidig kode

Oppgave

Skriv en funksjon som tar en streng og returnerer et map[rune]int som teller hvor mange ganger hvert tegn forekommer. Test den med strengen "hello".

Gratis å komme i gang

Lær deg Go med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
51
Leksjoner
203

Ofte stilte spørsmål

Er leksjonen «Maps: nøkkel-verdi-lagre» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Go Academy, inkludert «Maps: nøkkel-verdi-lagre», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Go Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Maps: nøkkel-verdi-lagre»?

Opprette, lese, skrive og slette map-oppføringer Du øver på Go Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Go Academy?

Ingen tidligere erfaring er nødvendig. Go Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Maps: nøkkel-verdi-lagre»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Go Academy-leksjonen?

Ja. Alle Go Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Arrays: samlinger med fast lengde
  2. Slices: dynamiske lister
  3. Maps: nøkkel-verdi-lagre
  4. Iterere over samlinger med range
← Tilbake til Go Academy