Maps: nøkkel-verdi-lagre
Opprette, lese, skrive og slette map-oppføringer
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".
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
- Arrays: samlinger med fast lengde
- Slices: dynamiske lister
- Maps: nøkkel-verdi-lagre
- Iterere over samlinger med range