Rumah > pembangunan bahagian belakang > Golang > Bilakah `json.Marshal` Mengembalikan Ralat Bukan Panik?

Bilakah `json.Marshal` Mengembalikan Ralat Bukan Panik?

Barbara Streisand
Lepaskan: 2024-11-01 06:34:31
asal
266 orang telah melayarinya

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

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>
Salin selepas log masuk

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:

  • UnsupportedTypeError: Berlaku apabila jenis yang tidak sah dihantar, seperti saluran atau fungsi.
  • UnsupportedValueError: Dibangkitkan apabila nilai tidak sah diberikan, seperti infiniti.

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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bilakah `json.Marshal` Mengembalikan Ralat Bukan Panik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan