Heim > Artikel > Backend-Entwicklung > Warum ist Fallthrough in der Typwechselanweisung von Go nicht zulässig?
Fallthrough in Typschaltern: Warum es nicht zulässig ist
In der Typschalteranweisung von Go ist das Schlüsselwort „fallthrough“ verboten. In der offiziellen Dokumentation wird diese Einschränkung kurz dargelegt, ohne eine ausführliche Erläuterung zu geben. Ziel dieses Artikels ist es, die möglichen Gründe für diese Einschränkung zu untersuchen.
Das Problem verstehen
Bei einem Typwechsel wertet jede case-Anweisung einen Ausdruck vom Typ interface{} aus. zu einem bestimmten Typ. Der Wert des Ausdrucks wird dann zur Verwendung im Case-Block an den angegebenen Typ gebunden. Fallthrough kann jedoch aufgrund der unterschiedlichen Typen, die jedem Fall zugeordnet sind, zu Verwirrung führen.
Betrachten Sie das folgende Beispiel:
var x interface{} x = bool(true) switch i := x.(type) { case int: fmt.Println(i + 1) // Error: cannot use bool as int case float64: fmt.Println(i + 2.0) // Error: cannot use bool as float64 case bool: fallthrough case string: fmt.Printf("%v", i) // Error: cannot use bool as string }
In diesem Szenario hätte die Variable i je nach Fall einen anderen Typ welcher Fall vorliegt. Wenn Fallthrough verwendet wird, würde die nachfolgende Case-Anweisung eine Variable vom gleichen Typ wie der vorherige Case erwarten. Wenn der vorherige Fall jedoch „bool“ war und Fallthrough verwendet wurde, würde der nachfolgende Fall auf einen Wert vom Typ „String“ stoßen, was zu Typkonfliktfehlern führen würde.
Mögliche Gründe
Alternative Ansätze
Wenn ein Entwickler die Funktionalität von benötigt Fallthrough in einem Typwechsel gibt es alternative Ansätze, um ähnliche Ergebnisse zu erzielen:
switch i := x.(type) { case int, float64: fmt.Println(i) }
switch i := x.(type) { case bool: if i { fmt.Println("True") } }
Das obige ist der detaillierte Inhalt vonWarum ist Fallthrough in der Typwechselanweisung von Go nicht zulässig?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!