Kontrollera om något finns
Comma-ok-idiomet
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 iok- Använd detta när noll kan vara ett verkligt värde
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
- Mappars interna funktion
- Kontrollera om något finns
- Mappar som mängder
- Iteration och ordning