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

Bilakah `json.Marshal` Mengembalikan Ralat Bukan Panik?

Barbara Streisand
Barbara Streisandasal
2024-11-01 06:34:31184semak imbas

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>

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>

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

Kenyataan:
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