Heim >Backend-Entwicklung >Golang >Warum erhalte ich in meinen Tests nur den Build-Fehler „errors.As Should not be *error' für den zweiten Parameter?
php-Editor Zimo, hallo! Was das von Ihnen erwähnte Problem im Build-Fehler betrifft, kann es mehrere Gründe für den Fehler „errors.As Should not be error“ geben. Erstens bedeutet dieser Fehler normalerweise, dass während des Builds das falsche zweite Argument verwendet wurde. Sie müssen sicherstellen, dass der zweite Parameter korrekt ist und dem erforderlichen Typ entspricht. Zweitens kann es sein, dass Sie in Ihrem Test falsche Daten verwenden. Bitte überprüfen Sie die Testdaten sorgfältig und stellen Sie sicher, dass sie dem erwarteten Format und den erwarteten Anforderungen entsprechen. Schließlich kann dieser Fehler auch durch Probleme mit dem Framework oder der Bibliothek verursacht werden. In diesem Fall wird empfohlen, die entsprechende Dokumentation zu konsultieren oder die Community um Hilfe zu bitten, um eine Lösung zu finden. Ich hoffe, diese Tipps sind hilfreich!
Berücksichtigen Sie den folgenden Test:
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!" }
Beim Ausführen dieses Tests wird ein Build-Fehler ausgegeben second 参数返回到错误。不应为 *error
.
Geh auf den Spielplatz
Wenn jedoch genau der gleiche Code in main
ausgeführt wird, läuft das Programm ohne Probleme:
package main import ( "errors" "fmt" ) func main() { err := &myerror{} var target error fmt.println(errors.as(err, &target)) } type myerror struct{} func (err *myerror) error() string { return "oops!" }
Geh auf den Spielplatz
Ich sehe dieses Verhalten auf dem Go-Playground und in meiner lokalen Entwicklungsumgebung, beide verwenden Go 1.20.
Ist das ein Fehler?
Ich konnte das Build-Fehlerproblem in meinen Tests lösen, indem ich einen error
-Typ erstellt habe:
package main import ( "errors" "fmt" "testing" ) type Error error // <===== Add error type func TestError(t *testing.T) { err := &MyError{} var target Error // <===== Use Error type fmt.Println(errors.As(err, &target)) } type MyError struct{} func (err *MyError) Error() string { return "oops!" }
Dieser Fehler wird durch den Befehl go vet
命令报告的。 go test
命令自动运行 go vet
以报告重大问题。 go build
命令不运行 go vet
verursacht.
Diese Warnung ist kein Fehler in Go.
Verwenden Sie *error
als zweiten Parameter, um errors.As aufzurufen. Ja Das macht keinen Sinn, da Sie bereits wissen, dass der erste Parameter die *error
作为第二个参数调用 errors.As 是没有意义的,因为您已经知道第一个参数满足 error
-Schnittstelle erfüllt. Du machst mit ziemlicher Sicherheit etwas falsch.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinen Tests nur den Build-Fehler „errors.As Should not be *error' für den zweiten Parameter?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!