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

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-01 22:53:02413ブラウズ

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

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