ホームページ > バックエンド開発 > Golang > Go で遅延関数からの誤った戻り値を処理するにはどうすればよいですか?

Go で遅延関数からの誤った戻り値を処理するにはどうすればよいですか?

Linda Hamilton
リリース: 2024-11-01 22:53:02
オリジナル
414 人が閲覧しました

How can I handle erroneous return values from deferred functions in Go?

Go での誤った戻り値を持つ遅延関数の処理

gometalinter と errcheck は、変数を返す関数が何もせずに遅延されると、正当に警告を発します。返されたエラーを確認します。これにより、処理できないエラーや潜在的なランタイムの問題が発生する可能性があります。

このシナリオに対処するための慣用句は、関数自体を延期するのではなく、戻り値をチェックする別の関数でラップすることです。以下に例を示します。

<code class="go">defer func() {
    if err := r.Body.Close(); err != nil {
        // Handle the error
    }
}()</code>
ログイン後にコピー

匿名関数を使用すると、遅延関数の戻り値を取得し、発生するエラーを処理できます。

あるいは、ヘルパー関数を作成することもできます。プロセスを簡略化するには:

<code class="go">func Check(f func() error) {
    if err := f(); err != nil {
        // Handle the error
    }
}</code>
ログイン後にコピー

このヘルパー関数を使用して複数の関数を延期し、戻り値が確実にチェックされるようにすることができます:

<code class="go">defer Check(r.Body.Close)
defer Check(SomeOtherFunc)</code>
ログイン後にコピー

ヘルパー関数を拡張することもできます。複数の関数を受け入れる場合:

<code class="go">func Checks(fs ...func() error) {
    for i := len(fs) - 1; i >= 0; i-- {
        if err := fs[i](); err != nil {
            // Handle the error
        }
    }
}</code>
ログイン後にコピー

これにより、複数の関数を延期し、より簡潔かつ体系的にエラーを処理できるようになります:

<code class="go">defer Checks(r.Body.Close, SomeOtherFunc)</code>
ログイン後にコピー

エラーが確実に処理されるようにするには正しい順序では、Checks() 関数は下向きループを使用して、宣言の逆の順序で関数を実行します。これは、遅延関数の実行順序と一致しており、最後の遅延関数が最初に実行されます。

以上がGo で遅延関数からの誤った戻り値を処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート