Maison > développement back-end > Golang > Allez - Erreur. Impossible de décompresser le type d'erreur personnalisé

Allez - Erreur. Impossible de décompresser le type d'erreur personnalisé

王林
Libérer: 2024-02-09 16:45:18
avant
864 Les gens l'ont consulté

Go - 错误。无法解包自定义错误类型

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.

Contenu de la question

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)
    }
}
Copier après la connexion

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).

Solution

au lieu de :

func reterror() error {
    return &myerror{errors.new("wrapped")}
}
Copier après la connexion

Faire : 🎜
func retError() error {
    return myError{errors.New("wrapped")}
}
Copier après la connexion

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!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal