Maison >développement back-end >Golang >Pourquoi est-ce que je reçois uniquement l'erreur de construction « error.As Should not be *error » pour le deuxième paramètre de mes tests ?
éditeur php Zimo, bonjour ! Concernant le problème dans l'erreur de construction que vous avez mentionnée, l'erreur "erreurs. Comme cela ne devrait pas être une erreur" peut avoir plusieurs raisons. Premièrement, cette erreur signifie généralement qu’un mauvais deuxième argument a été utilisé lors de la construction. Vous devez vous assurer que le deuxième paramètre est correct et correspond au type requis. Deuxièmement, il se peut que vous utilisiez les mauvaises données dans votre test. Veuillez examiner attentivement vos données de test et vous assurer qu'elles répondent au format et aux exigences attendus. Enfin, cette erreur peut également être provoquée par des problèmes liés au framework ou à la bibliothèque. Dans ce cas, il est recommandé de consulter la documentation pertinente ou de demander l'aide de la communauté pour trouver une solution. J'espère que ces conseils vous seront utiles !
Considérez le test suivant :
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!" }
L'exécution de ce test générera une erreur de construction second 参数返回到错误。不应为 *error
.
Aller au terrain de jeux
Cependant, lorsque vous exécutez exactement le même code dans main
, le programme s'exécute sans problème :
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!" }
Allez au terrain de jeu
Je constate ce comportement dans le terrain de jeu go et dans mon environnement de développement local, tous deux utilisant go 1.20.
Est-ce un bug en cours ?
J'ai pu résoudre le problème d'échec de build dans mes tests en créant un error
type :
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!" }
Cette erreur est provoquée par la commande go vet
命令报告的。 go test
命令自动运行 go vet
以报告重大问题。 go build
命令不运行 go vet
.
Cet avertissement n'est pas un bug dans Go.
Utilisez *error
comme deuxième paramètre pour appeler errors.As Oui Cela n'a aucun sens puisque vous savez déjà que le premier paramètre satisfait l'interface *error
作为第二个参数调用 errors.As 是没有意义的,因为您已经知道第一个参数满足 error
. Vous faites presque certainement quelque chose de mal.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!