Dave Cheney, pakar terkenal di Go, menekankan kepentingan menamatkan setiap baris literal komposit dengan koma. Walau bagaimanapun, peraturan ini nampaknya bercanggah dengan penghuraian JSON dalam Go.
Pertimbangkan kod berikut:
<code class="go">package main import ( "fmt" "encoding/json" ) 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>
Dalam kod ini, mengalih keluar koma mengekor daripada tatasusunan JSON menjadikannya berfungsi. Namun, adakah tidak ada cara untuk mengelakkan ketidakkonsistenan ini?
Malangnya, tidak. Spesifikasi JSON melarang koma di belakang. Ia adalah sintaks Go yang sah untuk menambah koma mengekor pada penghitungan terbuka yang diteruskan pada baris lain. Walau bagaimanapun, ini tidak boleh digunakan untuk JSON.
Berikut ialah contoh struktur JSON yang tidak sah:
{ "objects": [ {"name": "foo"}, ]}
Walaupun mungkin untuk memujuk penghurai JSON tertentu untuk menerima format ini, yang lain penghurai JSON yang sah akan melaporkan ralat dengan betul. Oleh itu, adalah disyorkan untuk mematuhi spesifikasi JSON dan mengelakkan koma di belakang.
Atas ialah kandungan terperinci Mengapa Kod Go Saya Panik dengan Ralat Masa Jalan Apabila Menghuraikan Tatasusunan JSON dengan Tanda Koma?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!