Wie prüft man in Go, ob ein String einen Teilstring enthält? Vom Anfänger zum Profi
\n\nHaben Sie jemals in Go programmiert und standen plötzlich vor der einfachen Frage: „Enthält dieser String den benötigten Teil?“ Wenn ja – Sie sind nicht allein. Auf Stack Overflow hat diese Frage tausende Aufrufe, und das zu Recht. In Go gibt es mehrere elegante Wege, diese Aufgabe zu lösen, aber welchen soll man wählen? Lassen Sie es uns ein für alle Mal klären.
\n\nIn diesem Artikel zeigen wir Ihnen nicht nur die Funktion strings.Contains. Wir bringen Ihnen bei, wie ein Go-Entwickler zu denken: das optimale Werkzeug für jede Situation auszuwählen, Fallstricke zu vermeiden und Code zu schreiben, der schnell und vorhersagbar arbeitet.
Inhaltsverzeichnis
\n- \n
- strings.Contains – Ihr erster Freund \n
- strings.Index – Wenn Sie mehr als Ja/Nein brauchen \n
- ContainsAny und ContainsRune – Feineinstellung \n
- Leistung: Was wählen? \n
- Grenzfälle und Fallstricke \n
- Zusammenfassung: Was Sie sich merken sollten \n
1. strings.Contains – Ihr erster Freund
\n\nBeginnen wir mit der einfachsten und beliebtesten Methode. Die Funktion strings.Contains aus der Standardbibliothek von Go ist das, was Sie in 80 % der Fälle brauchen. Sie gibt true zurück, wenn der String den angegebenen Teilstring enthält, andernfalls false.
So sieht das in echtem Code aus:
\n\npackage main\n\nimport (\n "fmt"\n "strings"\n)\n\nfunc main() {\n str := "Hallo, Go-Welt!"\n substr := "Welt"\n\n if strings.Contains(str, substr) {\n fmt.Println("String enthält Teilstring:", substr)\n } else {\n fmt.Println("Teilstring nicht gefunden")\n }\n}\n\n\nAusgabe:
\nString enthält Teilstring: Welt\n\nEinfach, oder? Die Funktion ist groß-/kleinschreibungsabhängig: strings.Contains("Go", "go") gibt false zurück. Wenn Sie die Groß-/Kleinschreibung ignorieren müssen, verwenden Sie strings.ToLower oder strings.EqualFold.
Beispiel mit Ignorieren der Groß-/Kleinschreibung
\n\nstr := "Golang ist großartig"\nsubstr := "golang"\n\nif strings.Contains(strings.ToLower(str), strings.ToLower(substr)) {\n fmt.Println("Gefunden (ohne Berücksichtigung der Groß-/Kleinschreibung)!")\n}\n\n\nWann verwenden: Wenn Sie eine einfache binäre Antwort benötigen – „vorhanden“ oder „nicht vorhanden“. Ohne unnötige Details.
\n\n2. strings.Index – Wenn Sie die Position wissen müssen
\n\nManchmal reicht es nicht zu wissen, dass ein Teilstring vorhanden ist. Sie möchten verstehen, wo genau er sich befindet. Zum Beispiel parsen Sie ein Log und möchten einen Teil des Strings nach einem bestimmten Marker ausschneiden. Hier kommt strings.Index zur Hilfe.
Diese Funktion gibt den Index des ersten Vorkommens des Teilstrings (beginnend bei 0) oder -1 zurück, wenn der Teilstring nicht gefunden wird.
\n\nstr := "Fehler: Datei nicht gefunden in /var/log"\nsubstr := "Datei"\n\npos := strings.Index(str, substr)\nif pos != -1 {\n fmt.Printf("Teilstring gefunden an Position %d\\n", pos)\n fmt.Printf("Kontext: %s\\n", str[pos:])\n} else {\n fmt.Println("Teilstring nicht gefunden")\n}\n\n\nAusgabe:
\nTeilstring gefunden an Position 7\nKontext: Datei nicht gefunden in /var/log\n\nEs gibt auch andere Varianten:
\n- \n
strings.LastIndex– sucht das letzte Vorkommen \n strings.IndexAny– sucht das erste Vorkommen eines beliebigen Zeichens aus einer Menge \n strings.IndexRune– sucht ein bestimmtes Unicode-Zeichen \n
// Beispiel mit LastIndex\nstr := "a-b-c-d"\nlastDash := strings.LastIndex(str, "-")\nfmt.Println("Letzter Bindestrich an Position:", lastDash) // 5\n\n// Beispiel mit IndexAny\nstr2 := "hallo welt"\npos := strings.IndexAny(str2, "aeiou")\nfmt.Println("Erster Vokal an Pos