Fallthrough beim Typwechsel: Eine ausführliche Erklärung
Der Typwechsel in Go ermöglicht eine effiziente Handhabung von Werten basierend auf ihren konkreten Typen. Anders als bei standardmäßigen Switch-Case-Anweisungen ist Fallthrough beim Typ switch jedoch ausdrücklich nicht zulässig. Diese Designwahl wirft Fragen zu ihrer Begründung auf.
Die Gründe verstehen
Die Go-Spezifikation besagt, dass „Fallthrough“ bei Typschaltern nicht zulässig ist. Dieses Verbot ergibt sich aus mehreren Faktoren:
Ein Beispiel zur Verdeutlichung
Zur Veranschaulichung Um das Problem zu lösen, betrachten Sie den folgenden Code:
switch i := x.(type) { case int: fmt.Printf("%T\n", i) // prints "int" case bool: fmt.Printf("%T\n", i) // prints "bool" fallthrough case string: fmt.Printf("%T\n", i) }
Wenn Fallthrough zulässig wäre, ist unklar, welcher Typ für die Zeichenfolgen-Groß-/Kleinschreibung gedruckt würde. Es wäre nicht eindeutig, ob ich ein boolescher Wert bleiben oder ein Interface{} werden soll, das sowohl einen booleschen Wert als auch einen String enthält.
Alternative Lösungen
Während Fallthrough nicht zulässig ist Typschalter, es gibt alternative Möglichkeiten, ein ähnliches Verhalten zu erreichen:
switch i := x.(type) { case bool, string: if b, ok := i.(bool); ok { // b is a bool } // i is an interface{} that contains either a bool or a string }
Dieser Ansatz ermöglicht eine spezifischere Handhabung verschiedener Typen, ohne dass es zu Typkonflikten oder Mehrdeutigkeiten kommt.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3