json.Marshal Error Handling: Understanding Input Induced Errors
Fungsi json.Marshal, seperti yang diserlahkan dalam dokumentasi, gagal mengendalikan kitaran struktur data, yang membawa kepada panik masa jalan. Walaupun ini adalah senario yang biasa, adalah mungkin untuk menghadapi situasi di mana ralat tidak panik dijana sebaliknya.
Penjanaan Ralat Punca Input
Untuk menggambarkan bukan- senario panik, pertimbangkan contoh berikut:
<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>
Hasil:
Atur cara di atas akan dilaksanakan tanpa panik dan sebaliknya mengembalikan ralat: json: unsupported type: * main.Node
Jenis Ralat
Fungsi json.Marshal boleh menjana dua jenis ralat:
Dalam contoh yang diberikan, ralat jatuh ke dalam kategori UnsupportedValueError, kerana ia berkaitan dengan nilai yang tidak sah (struktur data kitaran) dan bukannya jenis yang tidak sah.
Contoh Tambahan:
Berikut ialah beberapa senario tambahan yang boleh menyebabkan json.Marshal mengembalikan ralat bukan nol:
<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>
Atas ialah kandungan terperinci Bilakah `json.Marshal` Mengembalikan Ralat Bukan Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!