Heim > Backend-Entwicklung > Golang > Wie können Generics die Fehlerbehandlung in Go mit einem der beiden Typen verbessern?

Wie können Generics die Fehlerbehandlung in Go mit einem der beiden Typen verbessern?

Linda Hamilton
Freigeben: 2024-12-11 14:32:14
Original
237 Leute haben es durchsucht

How Can Generics Improve Error Handling in Go Using an Either Type?

Fehlerbehandlung mit einem generischen Entweder-Typ in Go

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]
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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)
    }
}
...
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage