ホームページ >バックエンド開発 >Golang >型情報を失わずに一般的なエラー処理を Go に実装するにはどうすればよいでしょうか?

型情報を失わずに一般的なエラー処理を Go に実装するにはどうすればよいでしょうか?

DDD
DDDオリジナル
2024-11-04 02:22:02513ブラウズ

How Can We Implement Generic Error Handling in Go Without Losing Type Information?

Must 関数によるジェネリックスのエラー処理

値とエラーの両方を返す関数を使用する場合、エラーの処理が面倒になることがあります。 Go にはジェネリックがないため、考えられるすべてのシナリオで機能するソリューションを開発するのは困難です。

提供された例では、そのような関数をラップする P という名前の関数を作成しようとしていますが、エラーが発生すると失敗します。エラー処理には効果的ですが、型情報が失われるため、空のインターフェイスが生成されます。

考えられる解決策の 1 つは、コード生成手法を使用して、作業する必要がある具象型ごとに P の特定の実装を作成することです。 「gengen」、「genny」、「gen」などのライブラリを使用すると、適切な型情報を保持する P のカスタム インスタンスを生成できます。

たとえば、関数が整数とエラーを返した場合:

<code class="go">func MyFunction() (int, error) {
    ...
}</code>

コード ジェネレーターを使用すると、この関数の P の特定の実装を作成できます:

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

このアプローチにより、型情報が確実に保持され、次の呼び出しが可能になります。 P_MyFunction を使用し、返された整数をシームレスに操作します。ただし、関数と型の組み合わせごとに特定の実装を生成する必要があるため、そのような関数が多数ある場合は面倒になる可能性があります。

以上が型情報を失わずに一般的なエラー処理を Go に実装するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。