Maison > Article > développement back-end > Quand « json.Marshal » renvoie-t-il une erreur non-panique ?
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>
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 :
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>
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!