Das Verständnis von `fallthrough` in Go's `switch`-Anweisungen
Olivia Novak
Dev Intern · Leapcell

Key Takeaways
- Go's
switch
-Anweisungen fallen nicht implizit durch; jeder Fall bricht automatisch ab. - Das Schlüsselwort
fallthrough
ermöglicht die bedingungslose Fortsetzung der Ausführung zum nächsten Fall. fallthrough
muss die letzte Anweisung in einem Fallblock sein und kann nicht im letzten Fall verwendet werden.
In Go ist die switch
-Anweisung eine leistungsstarke Kontrollstruktur, die eine effiziente Verzweigung basierend auf dem Wert eines Ausdrucks ermöglicht. Im Gegensatz zu einigen anderen Programmiersprachen brechen Go's switch
-Anweisungen automatisch ab, nachdem ein übereinstimmender Fall ausgeführt wurde, wodurch das in Sprachen wie C oder JavaScript übliche Fall-Through-Verhalten verhindert wird. Es gibt jedoch Szenarien, in denen die Ausführung nachfolgender Fälle wünschenswert ist. Hier kommt das Schlüsselwort fallthrough
ins Spiel.
Standardverhalten von switch
in Go
Standardmäßig wird, wenn ein Fall in einer Go switch
-Anweisung übereinstimmt, der Code innerhalb dieses Falls ausgeführt, und der Kontrollfluss verlässt den switch
-Block. Es gibt keinen impliziten Fall-Through zu nachfolgenden Fällen. Hier ist ein Beispiel, das dieses Verhalten veranschaulicht:
package main import ( "fmt" ) func main() { day := 3 switch day { case 1: fmt.Println("Montag") case 2: fmt.Println("Dienstag") case 3: fmt.Println("Mittwoch") case 4: fmt.Println("Donnerstag") case 5: fmt.Println("Freitag") default: fmt.Println("Wochenende") } }
Ausgabe:
Mittwoch
In diesem Beispiel ist die Ausgabe "Mittwoch", da day
gleich 3
ist. Das Programm fährt nicht mit der Ausführung der nachfolgenden Fälle fort.
Einführung von fallthrough
Das Schlüsselwort fallthrough
ermöglicht es einem case
, die Kontrolle an den nächsten Fall weiterzugeben, unabhängig von der Auswertung seines Ausdrucks. Dies kann in Szenarien nützlich sein, in denen mehrere Fälle sequenziell ausgeführt werden sollen. So funktioniert es:
package main import ( "fmt" ) func main() { num := 4 switch num { case 1: fmt.Println("Eins") fallthrough case 2: fmt.Println("Zwei") fallthrough case 3: fmt.Println("Drei") fallthrough case 4: fmt.Println("Vier") fallthrough case 5: fmt.Println("Fünf") default: fmt.Println("Zahl außerhalb des Bereichs") } }
Ausgabe:
Vier
Fünf
Zahl außerhalb des Bereichs
In diesem Beispiel gibt das Programm, wenn num
gleich 4
ist, "Vier" aus und fährt aufgrund der fallthrough
-Anweisung mit der Ausführung des Codes im nächsten Fall fort, wobei "Fünf" und dann "Zahl außerhalb des Bereichs" ausgegeben werden.
Wichtige Überlegungen
-
Bedingungslose Übergabe: Das Schlüsselwort
fallthrough
übergibt die Kontrolle bedingungslos an den nächsten Fall. Es wertet den Ausdruck des nächsten Falls nicht aus. Verwenden Sie es daher mit Bedacht, um unbeabsichtigtes Verhalten zu vermeiden. -
Platzierungsbeschränkungen: Die
fallthrough
-Anweisung muss die letzte Anweisung in einem Fallblock sein. Der Versuch, sie anderswo zu platzieren, führt zu einem Kompilierfehler. -
Einschränkung des letzten Falls: Sie können
fallthrough
nicht im letzten Fall einerswitch
-Anweisung verwenden, da es keinen nachfolgenden Fall gibt, an den die Kontrolle übergeben werden kann.
Praktisches Beispiel
Betrachten Sie ein Szenario, in dem Sie eine Zahl basierend auf ihrem Bereich kategorisieren möchten:
package main import ( "fmt" ) func main() { num := 75 switch { case num < 50: fmt.Printf("%d ist kleiner als 50\n", num) case num < 100: fmt.Printf("%d ist kleiner als 100\n", num) fallthrough case num < 200: fmt.Printf("%d ist kleiner als 200\n", num) } }
Ausgabe:
75 ist kleiner als 100
75 ist kleiner als 200
Da num
gleich 75
ist, ist der erste Fall (num < 50
) falsch, wird also übersprungen. Der zweite Fall (num < 100
) ist wahr, also wird "75 ist kleiner als 100" ausgegeben und dann, aufgrund von fallthrough
, mit dem nächsten Fall fortgefahren, wobei "75 ist kleiner als 200" ausgegeben wird.
Schlussfolgerung
Das Schlüsselwort fallthrough
in Go bietet einen Mechanismus, um explizit zu erlauben, dass die Kontrolle an den nachfolgenden Fall in einer switch
-Anweisung übergeht. Dies kann zwar in bestimmten Szenarien nützlich sein, es ist jedoch wichtig, es mit Bedacht einzusetzen, um die Übersichtlichkeit des Codes zu gewährleisten und unerwartetes Verhalten zu verhindern. Das Verständnis seines Verhaltens und seiner Einschränkungen stellt sicher, dass Ihre switch
-Anweisungen wie beabsichtigt funktionieren.
FAQs
Nein, Go's switch
bricht automatisch nach einem übereinstimmenden Fall ab, es sei denn, fallthrough
wird explizit verwendet.
Nein, fallthrough
übergibt die Kontrolle bedingungslos an den nächsten Fall.
Dies führt zu einem Kompilierfehler, da es keinen nachfolgenden Fall gibt, der ausgeführt werden kann.
Wir sind Leapcell, Ihre beste Wahl für das Hosten von Go-Projekten.
Leapcell ist die Serverless-Plattform der nächsten Generation für Webhosting, asynchrone Aufgaben und Redis:
Multi-Sprachen-Unterstützung
- Entwickeln Sie mit Node.js, Python, Go oder Rust.
Stellen Sie unbegrenzt Projekte kostenlos bereit
- zahlen Sie nur für die Nutzung - keine Anfragen, keine Gebühren.
Unschlagbare Kosteneffizienz
- Pay-as-you-go ohne Leerlaufgebühren.
- Beispiel: 25 US-Dollar unterstützen 6,94 Millionen 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 verwertbare Erkenntnisse.
Mühelose Skalierbarkeit und hohe Leistung
- Automatische Skalierung zur einfachen Bewältigung hoher Parallelität.
- Kein operativer Overhead – konzentrieren Sie sich einfach auf das Bauen.
Erfahren Sie mehr in der Dokumentation!
Folgen Sie uns auf X: @LeapcellHQ