Go Academy · Lektion

Kontrollera om något finns

Comma-ok-idiomet

Lektion 2 av 413 steg

Kontrollera om något finns är en gratis lektion i Go Academy på CoddyKit. Detta är lektion 2 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Go Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Go Academy innehåller totalt 4 lektioner.

Saknade nycklar returnerar nollvärdet

När du läser en nyckel som inte finns returnerar Go nollvärdet för värdetypen, inte ett fel. För int är det 0 och för string är det den tomma strängen.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 5}
	fmt.Println(m["missing"])
}

Problemet med tvetydighet

Om värdet 0 returneras, hur vet du om nyckeln finns med värdet 0 eller om den helt enkelt saknas? Det går inte att avgöra utifrån värdet ensamt.

Comma-ok-idiomet

Åtkomst till en map kan returnera två värden: värdet och ett booleskt värde. Det booleska värdet är true om nyckeln finns. Detta kallas comma-ok-idiomet.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 0}
	val, ok := m["a"]
	fmt.Println(val, ok)
}

Skilja saknade nycklar från befintliga

Nu kan du skilja dem åt. En befintlig nyckel ger ok = true även om dess värde är nollvärdet.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 0}
	_, okA := m["a"]
	_, okB := m["b"]
	fmt.Println("a exists:", okA, "b exists:", okB)
}

Kontrollera innan du agerar

Ett vanligt mönster är att använda comma-ok inuti en if för att bara agera när nyckeln finns.

package main

import "fmt"

func main() {
	prices := map[string]int{"pen": 3}
	if p, ok := prices["pen"]; ok {
		fmt.Println("price is", p)
	} else {
		fmt.Println("not found")
	}
}

Ignorera värdet

Om du bara bryr dig om huruvida en nyckel finns använder du den tomma identifieraren _ för värdet.

package main

import "fmt"

func main() {
	seen := map[string]bool{"x": true}
	_, exists := seen["x"]
	fmt.Println("x seen:", exists)
}

Räkna förekomster

Comma-ok passar bra ihop med räknare. Observera dock att m[key]++ fungerar även utan ok, eftersom en saknad nyckel börjar på noll.

package main

import "fmt"

func main() {
	counts := map[string]int{}
	for _, w := range []string{"a", "b", "a"} {
		counts[w]++
	}
	fmt.Println(counts)
}

Säkra standardvärden

Du kan ange ett reservvärde när en nyckel saknas genom att använda comma-ok och en standardvariabel.

package main

import "fmt"

func main() {
	cfg := map[string]string{}
	lang, ok := cfg["lang"]
	if !ok {
		lang = "en"
	}
	fmt.Println("lang:", lang)
}

Comma-ok även utanför mappar

Tvåvärdesformen förekommer också vid mottagning från kanaler och vid typassertioner. Mönstret är konsekvent: det andra värdet anger om operationen lyckades.

package main

import "fmt"

func main() {
	var i interface{} = "hello"
	s, ok := i.(string)
	fmt.Println(s, ok)
}

Kontrollera om ett värde finns i en mängd

Mappar med booleska värden eller tomma structar används ofta för att hålla reda på mängdtillhörighet. Comma-ok ger ett tydligt svar på frågan om ett värde finns i mängden.

package main

import "fmt"

func main() {
	allowed := map[string]struct{}{"read": {}, "write": {}}
	_, ok := allowed["delete"]
	fmt.Println("delete allowed:", ok)
}

Bästa praxis

Använd alltid comma-ok när ett nollvärde kan vara ett legitimt lagrat värde. Det eliminerar tvetydighet och gör avsikten tydlig.

Snabbkontroll

Du läser val, ok := m["x"] och får val = 0, ok = true. Vad innebär det?

Sammanfattning

Kontrollera om en nyckel finns med comma-ok:

  • Saknade nycklar returnerar nollvärdet
  • val, ok := m[key] anger om nyckeln finns i ok
  • Använd detta när noll kan vara ett verkligt värde
Gratis att börja

Lär dig Go med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
51
Lektioner
203

Vanliga frågor

Är lektionen ”Kontrollera om något finns” gratis?

Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Go Academy, inklusive ”Kontrollera om något finns”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Go Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Kontrollera om något finns”?

Comma-ok-idiomet Ni övar på Go Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Go Academy?

Du behöver inga förkunskaper. Utbildningen i Go Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 2 av 4.

Hur lång tid tar lektionen ”Kontrollera om något finns”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Go Academy-lektionen?

Ja. Varje Go Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Mappars interna funktion
  2. Kontrollera om något finns
  3. Mappar som mängder
  4. Iteration och ordning
← Tillbaka till Go Academy