Maison > développement back-end > Golang > Quand « json.Marshal » renvoie-t-il une erreur non-panique ?

Quand « json.Marshal » renvoie-t-il une erreur non-panique ?

Barbara Streisand
Libérer: 2024-11-01 06:34:31
original
265 Les gens l'ont consulté

When Does `json.Marshal` Return a Non-Panic Error?

Gestion des erreurs json.Marshal : comprendre les erreurs induites par les entrées

La fonction json.Marshal, comme souligné dans la documentation, ne parvient pas à gérer les erreurs cycliques. structures de données, conduisant à des paniques d'exécution. Bien qu'il s'agisse d'un scénario courant, il est possible de rencontrer des situations dans lesquelles une erreur non-panique est générée à la place.

Génération d'erreur provoquant une entrée

Pour illustrer un scénario non-panique. scénario de panique, considérons l'exemple suivant :

<code class="go">type Node struct {
    Value int
    Next  *Node
}

func main() {
    node1 := Node{1, nil}
    node2 := Node{2, &node1}
    node1.Next = &node2

    _, err := json.Marshal(node1)
    if err != nil {
        fmt.Printf("Error encountered: %v\n", err)
    }
}</code>
Copier après la connexion

Résultat :

Le programme ci-dessus s'exécutera sans panique et renverra à la place l'erreur : json : type non pris en charge : * main.Node

Types d'erreurs

La fonction json.Marshal peut générer deux types d'erreurs :

  • UnsupportedTypeError : Se produit lorsqu'un type non valide est transmis, tel qu'un canal ou une fonction.
  • UnsupportedValueError : Déclenché lorsqu'une valeur non valide est fournie, telle que l'infini.

Dans l'exemple donné, l'erreur entre dans la catégorie UnsupportedValueError, car elle concerne une valeur non valide (structure de données cyclique) plutôt qu'un type non valide.

Exemples supplémentaires :

Voici quelques scénarios supplémentaires qui peuvent amener json.Marshal à renvoyer des erreurs non nulles :

<code class="go">_, err := json.Marshal(nil)  // Error: json: unsupported value: nil
_, err := json.Marshal(1e100) // Error: json: unsupported value: 1e+100, must be finite</code>
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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal