Bolehkah Marshalling a Go `metakan[rentetan]rentetan` ke JSON Gagal, dan Dalam Keadaan Apa?

Barbara Streisand
Lepaskan: 2024-11-26 02:53:16
asal
307 orang telah melayarinya

Can Marshalling a Go `map[string]string` to JSON Fail, and Under What Circumstances?

Bolehkah Marshalling a Map[rentetan]ke JSON Mengembalikan Ralat?

Secara amnya, menyusun peta[rentetan]yang sah ke JSON menggunakan json.Marshal() tidak mungkin mengakibatkan ralat. Ini kerana kedua-dua kunci dan nilai dalam JSON ialah rentetan Unicode yang sah yang diwakili oleh Go menggunakan urutan bait berkod UTF-8.

Walau bagaimanapun, terdapat beberapa situasi luar biasa yang perlu dipertimbangkan:

  • UTF-8 tidak sah: Menggabungkan rentetan dengan aksara UTF-8 tidak sah tidak akan menyebabkan ralat, tetapi aksara akan digantikan dengan aksara gantian Unikod (U FFFD).
m := map[string]string{"\xff": "a"}
data, err := json.Marshal(m)
// Output: {"\ufffd":"a"} <nil>
Salin selepas log masuk
  • Pengubahsuaian Peta Serentak: Menjalankan json.Marshal() pada peta yang sedang diubah suai secara serentak oleh goroutine lain boleh mencetuskan pengesanan penyalahgunaan peta serentak masa jalan. Ini akan mengakibatkan ralat maut.
m := map[string]string{"a": "b"}

go func() {
    for {
        m["c"] = "d"
    }
}()

for {
    if _, err := json.Marshal(m); err != nil {
        // Error: "concurrent map iteration and map write"
    }
}
Salin selepas log masuk
  • Habis Ingatan: Kes-kes keletihan memori yang melampau boleh menamatkan aplikasi sebelum json.Marshal() kembali.

Walaupun secara amnya tidak perlu untuk mengendalikan ralat semasa menyusun peta[rentetan]rentetan ke JSON, amalan pengaturcaraan yang baik menentukan untuk menyemak ralat dalam semua kes, walaupun dalam situasi di mana kemungkinan ralat adalah rendah.

Atas ialah kandungan terperinci Bolehkah Marshalling a Go `metakan[rentetan]rentetan` ke JSON Gagal, dan Dalam Keadaan Apa?. 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