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?

Warum erhalte ich in meinen Tests nur den Build-Fehler „errors.As Should not be *error' für den zweiten Parameter?

WBOY
WBOYnach vorne
2024-02-08 22:06:20779Durchsuche

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

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!

Frageninhalt

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?

Bearbeiten

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!"
}

Lösung

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen