Gibt es in Go eine "if x in"-Konstruktion zur Überprüfung der Elementzugehörigkeit wie in Python?
Es gibt keine direkte "if x in"-Syntax in Go, aber mehrere effiziente Lösungen
In Go gibt es tatsächlich keine direkte Entsprechung zu Pythons `if x in` für Slices oder Arrays. Die Sprache bietet keinen eingebauten Operator oder eine generische Funktion in der Standardbibliothek dafür. Stattdessen muss man entweder eine Schleife schreiben oder eine Hilfsfunktion definieren. Hier sind die gängigsten Ansätze:
- Manuelle Schleife: Der einfachste und idiomatischste Weg in Go ist eine `for`-Schleife mit `range`:
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
found := false
for _, fruit := range fruits {
if fruit == "banana" {
found = true
break
}
}
if found {
fmt.Println("Found it!")
}
}
- Hilfsfunktion: Für häufige Verwendung kann man eine generische Funktion schreiben (ab Go 1.18 mit Generics):
package main
import "fmt"
func contains[T comparable](slice []T, element T) bool {
for _, v := range slice {
if v == element {
return true
}
}
return false
}
func main() {
fruits := []string{"apple", "banana", "cherry"}
if contains(fruits, "banana") {
fmt.Println("Found it!")
}
}
- Map für häufige Lookups: Wenn Sie viele Prüfungen durchführen müssen, konvertieren Sie das Slice in eine Map für O(1)-Lookups:
package main
import "fmt"
func main() {
fruits := []string{"apple", "banana", "cherry"}
fruitSet := make(map[string]bool)
for _, fruit := range fruits {
fruitSet[fruit] = true
}
if fruitSet["banana"] {
fmt.Println("Found it!")
}
}
Die Schleifenlösung ist am idiomatischsten und wird in Go-Community bevorzugt. Für kleine Slices ist sie effizient und klar. Die generische Funktion ist nützlich, wenn Sie die Prüfung oft wiederholen. Maps sind ideal, wenn Sie viele Lookups auf demselben Datensatz durchführen.