ホームページ  >  記事  >  バックエンド開発  >  Golang の具象型エラー スニペット

Golang の具象型エラー スニペット

PHPz
PHPz転載
2024-02-05 22:12:12960ブラウズ

Golang 中具体类型的错误片段

質問内容

Goでエラーラッピングを試しており、ラップされたカスタムエラータイプを返す関数があります。私がやりたいのは、予期されるエラーのリストを反復処理し、関数の出力にこれらの予期されるエラーが含まれるかどうかをテストすることです。

カスタム エラーを []error に入れると、カスタム エラーのタイプが *fmt.wraperror、つまり errors.as( ) は、ほとんどの場合 true を返します。

例として、次のコードを考えてみましょう:

リーリー

出力は

です リーリー

理想的には、出力は

であることが望ましいです。 リーリー

エラーの理由は、テスト ケース エントリごとに予期されるエラーのリストを定義できるようにしたいためです。関数に特定の入力を提供すると、関数がパスに従い、特定のエラーを含むエラーが返されることがわかっているとします。

error.as# で使用できるように、[]error スライスから *fmt.wraperror 型を元の型に変換するにはどうすればよいですか? ##?

を使用して特定の型にキャストできることはわかっています。 (別のエラー) しかし、スライスを反復処理するときに機能させるには、関数が返す可能性のあるすべてのエラーに対してこれを行う必要があります。 )


正解


次の方法を使用してチートできます

errors.as: リーリー

出力された型は期待したものではありませんが、

errors.as は正常に動作します。

あなたの例が機能しない理由は、

errors.as に渡しているものが *error であるためです。したがって、ラップされたエラー値 (つまり err) はターゲット値に直接割り当てられます。この例では、errors.as に渡される値は **anothererror であり、err*anothererror に割り当てることができません。

以上がGolang の具象型エラー スニペットの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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