Heim >Backend-Entwicklung >Golang >Wie implementiert man die generische Fehlerbehandlung in „Go Without Generics'?
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.
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!