Wie man überprüft, ob ein Array ein bestimmtes Element in Go enthält
Grace Collins
Solutions Engineer · Leapcell

Key Takeaways
- Das Iterieren über ein Slice ist der einfachste Weg, um nach einem Element zu suchen.
- Die Verwendung einer Map ermöglicht schnellere Suchen bei häufigen Überprüfungen.
- Arrays haben eine feste Größe, während Slices in Go flexibler sind.
In Go haben Arrays eine feste Größe und werden nicht häufig in Situationen verwendet, in denen sich die Größe der Sammlung ändern kann. Stattdessen werden häufiger Slices verwendet, die dynamisch dimensioniert sind. Um zu überprüfen, ob ein Slice ein bestimmtes Element enthält, können Sie das Slice durchlaufen und jedes Element mit dem Zielwert vergleichen.
Hier ist ein Beispiel, wie man dies macht:
package main import "fmt" func contains(slice []int, element int) bool { for _, v := range slice { if v == element { return true } } return false } func main() { numbers := []int{1, 2, 3, 4, 5} fmt.Println(contains(numbers, 3)) // Ausgabe: true fmt.Println(contains(numbers, 6)) // Ausgabe: false }
In diesem Beispiel durchläuft die Funktion contains
jedes Element im Slice. Wenn sie ein Element findet, das mit dem Zielwert übereinstimmt, gibt sie true
zurück. Wenn sie die Schleife abschließt, ohne eine Übereinstimmung zu finden, gibt sie false
zurück.
Dieser Ansatz funktioniert für Slices beliebigen Typs. Um beispielsweise nach einer Zeichenkette in einem Slice von Zeichenketten zu suchen, können Sie die Funktion wie folgt ändern:
package main import "fmt" func contains(slice []string, element string) bool { for _, v := range slice { if v == element { return true } } return false } func main() { words := []string{"apple", "banana", "cherry"} fmt.Println(contains(words, "banana")) // Ausgabe: true fmt.Println(contains(words, "date")) // Ausgabe: false }
Wenn Sie diese Überprüfung häufig oder auf großen Slices durchführen müssen, sollten Sie die Verwendung einer Map für schnellere Suchen in Betracht ziehen, da Map-Suchen im Durchschnitt eine konstante Zeitkomplexität aufweisen. Hier ist, wie Sie das machen können:
package main import "fmt" func main() { elements := map[int]struct{}{ 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, } _, exists := elements[3] fmt.Println(exists) // Ausgabe: true _, exists = elements[6] fmt.Println(exists) // Ausgabe: false }
In diesem Beispiel verwenden wir eine Map mit Schlüsseln des Elementtyps und leeren Strukturwerten. Die leere Struktur belegt null Byte, was sie zu einer speichereffizienten Wahl macht, wenn Sie keine zusätzlichen Informationen speichern müssen.
Denken Sie daran, dass Arrays zwar Teil des Go-Typsystems sind, Slices jedoch aufgrund ihrer Flexibilität und dynamischen Größenanpassung häufiger verwendet werden.
FAQs
Slices in Go haben keine eingebauten Containment-Checks, daher ist die Iteration ein einfacher und direkter Ansatz.
Verwenden Sie eine Map, wenn Sie schnelle Suchen benötigen, da Map-Operationen effizienter sind als das Durchlaufen großer Slices.
Ja, Sie können die Funktion so ändern, dass sie mit verschiedenen Typen wie string
oder float64
arbeitet.
Wir sind Leapcell, Ihre erste Wahl für das Hosting von Go-Projekten.
Leapcell ist die Next-Gen Serverless Plattform für Web Hosting, Async Tasks und Redis:
Multi-Language Support
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Deploy unlimited projects for free
- Zahlen Sie nur für die Nutzung — keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 $ unterstützen 6,94 Mio. Anfragen bei einer durchschnittlichen Antwortzeit von 60 ms.
Optimierte Entwicklererfahrung
- Intuitive Benutzeroberfläche für mühelose Einrichtung.
- Vollautomatische CI/CD-Pipelines und GitOps-Integration.
- Echtzeitmetriken und Protokollierung für umsetzbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Auto-Scaling zur einfachen Bewältigung hoher Gleichzeitigkeit.
- Kein operativer Aufwand — konzentrieren Sie sich einfach auf den Bau.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ