In Go 1.18 bietet die Einführung von Generika das Potenzial für eine verbesserte Fehlerbehandlung. Durch die Erstellung eines „Either[A,B]“-Typs wird es möglich, einen Wert darzustellen, der entweder vom Typ A oder B sein kann.
Dieser Ansatz unterscheidet sich von der herkömmlichen Go-Sprache, bei der sowohl ein „normal“ zurückgegeben wird '-Wert und einen Fehlerwert, wobei ein Nullfehler eine erfolgreiche Rückgabe anzeigt. Dies kann jedoch problematisch sein, wenn das gewünschte Verhalten darin besteht, zu vermitteln, dass ein Wert entweder A oder B ist und nicht beides.
Überwindung von Schnittstellenmethodenbeschränkungen
Versuche dazu Das Definieren einer Schnittstelle mit Typparametern für die Switch-Methode war aufgrund der Einschränkung, dass Schnittstellenmethoden keine Typparameter haben dürfen, nicht erfolgreich. Um dies zu umgehen, besteht ein alternativer Ansatz darin, das Konzept der Optionalität einzuführen.
Optionalität und der Entweder-Typ
Ein optionaler Typ kann als eine Schnittstelle definiert werden, die eine hat get()-Methode, die entweder einen Wert und einen Nullfehler zurückgibt oder einen Fehler, wenn kein Wert vorhanden ist. Der Entweder-Typ kann dann im Sinne des Optionalitätskonzepts definiert werden:
type Either[A, B any] interface { is_left() bool is_right() bool find_left() Optional[A] find_right() Optional[B] }
Mit diesem Ansatz kann der Entweder-Typ als linke und rechte Variante implementiert werden, die das Vorhandensein eines Werts vom Typ A oder darstellen B.
type Left[A, B any] struct { data A } type Right[A, B any] struct { data B }
Beispiel aus der Praxis
Das folgende Beispiel zeigt die Eingabe „Entweder“. Aktion:
var e1 Either[int, string] = left[int, string](4143) var e2 Either[int, string] = right[int, string]("G4143") ... if e1.is_left() { if l, err := e1.find_left().get(); err == nil { fmt.Printf("The int is: %d\n", l) } else { fmt.Fprintln(os.Stderr, err) } } ...
Dieser Code erfasst und verarbeitet effektiv den Wert „Entweder“ und zeigt, wie das Optionalitätskonzept eine flexible und ausdrucksstarke Möglichkeit bietet, Fehler zu behandeln oder optionale Werte in Go darzustellen.
Das obige ist der detaillierte Inhalt vonWie können Generics die Fehlerbehandlung in Go mit einem der beiden Typen verbessern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!