Heim >Backend-Entwicklung >Golang >Wie implementiert man die generische Fehlerbehandlung in „Go Without Generics'?

Wie implementiert man die generische Fehlerbehandlung in „Go Without Generics'?

Susan Sarandon
Susan SarandonOriginal
2024-11-04 12:48:01353Durchsuche

How to Implement Generic Error Handling in Go Without Generics?

Implementierung der generischen Fehlerbehandlung in Go

Das Fehlen generischer Funktionen in Go stellt eine Herausforderung dar, wenn man versucht, Funktionalitäten zu verallgemeinern. Ein häufiges Szenario ist die Notwendigkeit einer generischen Fehlerbehandlungsfunktion, die auf jede Funktion anwendbar ist, die einen Wert und einen Fehler zurückgibt.

Das bereitgestellte Beispiel zeigt einen Versuch, eine solche Funktion mithilfe einer leeren Schnittstelle zu erstellen:

<code class="go">func P(any interface{}, err error) (interface{}) {
    if err != nil {
        panic("error: "+ err.Error())
    }
    return any
}</code>

Während dieser Ansatz für die Fehlerbehandlung funktioniert, gehen Typinformationen verloren, sodass die resultierende Schnittstelle leer bleibt.

Generieren einer typspezifischen Fehlerbehandlung Funktionen

Um das Problem verlorener Typinformationen zu vermeiden, sollten Sie die Codegenerierung verwenden, um spezielle Implementierungen der Fehlerbehandlungsfunktion für verschiedene Typen zu erstellen. Dies kann mit Tools wie „go generic“, „gengen“, „genny“ oder „gen“ erreicht werden.

Mit „gen“ können Sie beispielsweise eine Vorlage definieren:

<code class="text">// template.go

package main

import "fmt"

func P[T any](v T, err error) (T) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>

Diese Vorlage kann verwendet werden, um typspezifische Implementierungen von P() zu generieren:

<code class="sh">gen generate</code>

Dadurch werden Implementierungen wie z als:

<code class="go">// p_int.go

package main

func PInt(v int, err error) (int) {
    if err != nil {
        panic(fmt.Sprintf("error: %v", err))
    }
    return v
}</code>

Durch die Verwendung dieser generierten Funktionen bleiben Typinformationen erhalten und die Fehlerbehandlung kann nahtlos auf bestimmte Typen angewendet werden.

Das obige ist der detaillierte Inhalt vonWie implementiert man die generische Fehlerbehandlung in „Go Without Generics'?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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