ホームページ >バックエンド開発 >Golang >エラー処理に型アサーションを使用するのは間違っていますか?

エラー処理に型アサーションを使用するのは間違っていますか?

WBOY
WBOY転載
2024-02-10 10:24:09926ブラウズ

エラー処理に型アサーションを使用するのは間違っていますか?

エラー処理に型アサーションを使用するのは一般的な方法ですが、それがエラーであるかどうかは特定の状況によって異なります。型アサーションを使用すると、渡されたパラメーターの型が期待を満たしていることを検証できるため、コード内のエラーを早期に検出できます。ただし、エラー処理が型アサーションに依存し、他の考えられる例外を無視する場合、問題が発生する可能性があります。したがって、エラー処理に型アサーションを使用する場合は、コードのロジックと信頼性を包括的に考慮し、コードの安定性と保守性を確保するためにさまざまな例外が適切に処理されるようにする必要があります。

質問内容

なぜ golang ではスイッチ型アサーション形式のエラー処理が使われない/推奨されないのか疑問です。どうしたの?それともコミュニティは単にそれを気にしていないのでしょうか?

たとえば、次のコード:

リーリー

は次のように記述できます:

if err != nil {
    if errors.as(err, &queryerr{}) {
        log.println("query error : ", err)
        return http.statusinternalservererror
    } else if errors.as(err, &querydataextractionerr{}) {
        return http.statusnotfound
    } else {
        log.println(err.error())
        return http.statusinternalservererror
    }
}

回避策

タイプ スイッチは技術的には正しいです。ただし、型の切り替えが正しくないと、ラップされたエラーが誤って解釈される可能性があります。例えば:### リーリー

上記では、

err1.(io.eof) は失敗しますが、errors.is(err1,io.eof) は失敗しません。

したがって、

errors.iserrors.as を使用して、手元のエラーに探しているエラーが含まれているかどうかをテストする必要があります。

以上がエラー処理に型アサーションを使用するのは間違っていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。