L'éditeur php Xigua vous présentera : Dans le langage Go, lorsque nous utilisons des types d'erreur personnalisés, nous rencontrons parfois le problème de "Erreur. Impossible de décompresser les types d'erreur personnalisés". Ce problème se produit généralement lorsque nous essayons de transmettre des types d'erreur personnalisés à d'autres fonctions ou méthodes. Même si cela peut sembler un problème délicat, il existe en réalité plusieurs façons de le résoudre. Dans cet article, nous explorerons les causes de ce problème et proposerons des solutions pour vous aider à résoudre ce problème.
J'essaie d'utiliser les erreurs du package go stdlib pour décompresser un type d'erreur personnalisé à l'aide de errors.as
mais il semble que la vérification échoue et je ne peux pas extraire l'erreur sous-jacente.
J'ai extrait un exemple minimal reproductible :
package main import ( "errors" "fmt" ) type myError struct { err error } func (m myError) Error() string { return fmt.Sprintf("my error: %s", m.err) } func retError() error { return &myError{errors.New("wrapped")} } func main() { var m myError if err := retError(); errors.As(err, &m) { fmt.Println("unwrapped", m.err) } else { fmt.Println(err) } }
https://go.dev/play/p/i7bnk4-rdib - Exemples sur le terrain de jeu en déplacement. S'il est lancé, il affiche "mon erreur : emballage" au lieu de l'"emballage non emballé" attendu.
errors.as
文档中的示例有效,我似乎无法理解我做错了什么 - 我将 *myerror
传递给 errors.as
,这似乎是正确的(因为传递了 myerror
引发恐慌:target 必须是非零指针
L'exemple dans la documentation fonctionne, je n'arrive pas à comprendre ce que je fais de mal - je passe *myerror
à ce qui semble être correct (car en passant myerror< /code> lance Panic : <code>la cible doit être un pointeur différent de zéro
, c'est normal). Solutionau lieu de :
func reterror() error { return &myerror{errors.new("wrapped")} }
func retError() error { return myError{errors.New("wrapped")} }
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!