Go での誤った戻り値を持つ遅延関数の処理
gometalinter と errcheck は、変数を返す関数が何もせずに遅延されると、正当に警告を発します。返されたエラーを確認します。これにより、処理できないエラーや潜在的な実行時の問題が発生する可能性があります。
このシナリオに対処するための慣用句は、関数自体を延期するのではなく、戻り値をチェックする別の関数でラップすることです。以下に例を示します。
defer func() {
if err := r.Body.Close(); err != nil {
// Handle the error
}
}()
匿名関数を使用すると、遅延関数の戻り値を取得し、発生するエラーを処理できます。
または、ヘルパー関数を作成してプロセスを簡素化することもできます。 :
func Check(f func() error) {
if err := f(); err != nil {
// Handle the error
}
}
このヘルパー関数を使用して複数の関数を延期し、戻り値が確実にチェックされるようにすることができます:
defer Check(r.Body.Close)
defer Check(SomeOtherFunc)
複数の関数を受け入れるようにヘルパー関数を拡張することもできます。
func Checks(fs ...func() error) {
for i := len(fs) - 1; i >= 0; i-- {
if err := fs[i](); err != nil {
// Handle the error
}
}
}
これにより、複数の関数を延期し、より簡潔かつ組織的な方法でエラーを処理できます:
defer Checks(r.Body.Close, SomeOtherFunc)
エラーが正しい順序で処理されることを保証するために、Checks() 関数は下向きループを使用して、宣言の逆の順序で関数を実行します。これは、遅延関数の実行順序と一致し、最後の遅延関数が最初に実行されます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3