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

DDD
リリース: 2024-11-04 02:22:02
オリジナル
416 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!