Dave Cheney, pakar terkenal di Go, menekankan keperluan untuk mengekori koma dalam pengisytiharan literal komposit. Walau bagaimanapun, peraturan ini nampaknya bercanggah dengan penghuraian JSON.
Pertimbangkan kod berikut:
<code class="go">// package, imports omitted for brevity type jsonobject struct { Objects []ObjectType `json:"objects"` } type ObjectType struct { Name string `json:"name"` } func main() { bytes := []byte(`{ "objects": [ {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK! ]}`) jsontype := &jsonobject{} json.Unmarshal(bytes, &jsontype) fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range }</code>
Mengalih keluar koma mengekor menyelesaikan ralat masa jalan. Adakah Go menyokong pembetulan untuk ketidakkonsistenan ini?
Malangnya, tiada penyelesaian. Spesifikasi JSON tidak membenarkan koma di belakang. Walaupun sintaks Go mewajibkan mengekori koma dalam literal komposit, keperluan ini tidak digunakan untuk penghuraian JSON.
Dalam erti kata lain, JSON berikut tidak sah:
<code class="json">{ "objects": [ {"name": "foo"}, ]}</code>
Walaupun berpotensi untuk sesuatu yang khusus Penghurai JSON untuk mengabaikan koma di belakang, amalan ini harus dielakkan kerana ia boleh menyebabkan ralat apabila menggunakan penghurai JSON yang lain yang sah.
Atas ialah kandungan terperinci Mengekori Koma dalam JSON: Mengapakah Sintaks Tersurat Komposit Go Bercanggah dengan Penghuraian JSON?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!