テストの 2 番目のパラメーターに対して「errors.As should not be *error」ビルド エラーのみが表示されるのはなぜですか?

WBOY
リリース: 2024-02-08 22:06:20
転載
749 人が閲覧しました

为什么我仅在测试中收到“errors.As should not be *error”构建错误的第二个参数?

php エディター Zimo、こんにちは!ご指摘のビルド エラーの問題については、「エラー。エラーではないはずです」エラーにはいくつかの理由が考えられます。まず、このエラーは通常、ビルド中に間違った 2 番目の引数が使用されたことを意味します。 2 番目のパラメータが正しく、必要な型と一致していることを確認する必要があります。次に、テストで間違ったデータを使用している可能性があります。テスト データを注意深く確認し、予想される形式と要件を満たしていることを確認してください。最後に、このエラーはフレームワークまたはライブラリの問題によって発生する可能性もあります。この場合、解決策を見つけるために関連ドキュメントを参照するか、コミュニティからの支援を求めることをお勧めします。これらのヒントがお役に立てば幸いです。

質問の内容

次のテストを考えてみましょう:

リーリー

このテストを実行すると、ビルド エラー 秒パラメータがエラーに返されます。 *error であってはなりません。

遊園地に行きます

ただし、まったく同じコードを main で実行すると、プログラムは問題なく実行されます。 リーリー

遊園地に行きます

この動作は、どちらも go 1.20 を使用している go プレイグラウンドとローカル開発環境で発生しています。

これは go のバグですか?

###編集###

error

タイプ:

を作成することで、テストでのビルド失敗の問題を解決できました。

import (
    "errors"
    "fmt"
    "testing"
)

func testerror(t *testing.t) {
    err := &myerror{}
    var target error
    fmt.println(errors.as(err, &target))
}

type myerror struct{}

func (err *myerror) error() string {
    return "oops!"
}
ログイン後にコピー
解決策

このエラーは、

go vet

コマンドによって報告されました。

go test コマンドは、go vet を自動的に実行して、重大な問題を報告します。 go build コマンドは、go vet コマンドを実行しません。 この警告は Go のバグではありません。

最初の引数が

error

インターフェイスを満たすことがすでにわかっているため、2 番目の引数として

*error を指定して errors.As を呼び出すことは意味がありません。あなたはほぼ確実に何か間違ったことをしています。

以上がテストの 2 番目のパラメーターに対して「errors.As should not be *error」ビルド エラーのみが表示されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!