Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengekalkan Sifar Mengekor dalam Output JSON untuk Nombor Titik Terapung Go?
Memelihara Sifar Pengesanan dalam Output JSON untuk Nombor Titik Terapung
Dalam Go, fungsi json.Marshal() biasanya digunakan untuk bersiri struktur data ke dalam format JSON. Walau bagaimanapun, ia mempunyai kecenderungan untuk menanggalkan sifar mengekor daripada nombor titik terapung semasa proses penukaran. Ini boleh menjadi masalah jika aplikasi yang menggunakan menjangkakan nombor tersebut mempunyai sifar di belakang.
Untuk menangani isu ini, satu pendekatan ialah mencipta jenis titik terapung tersuai yang melaksanakan antara muka json.Marshaler. Ini membolehkan anda menentukan cara jenis itu disiri ke dalam JSON. Berikut ialah contoh pelaksanaan:
type KeepZero float64 func (f KeepZero) MarshalJSON() ([]byte, error) { if float64(f) == float64(int(f)) { return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil } return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil }
Dalam kod ini:
Untuk menggunakan jenis KeepZero, anda boleh menggantikan medan float64 asal dalam struktur data anda dengan medan KeepZero. Contohnya:
type Pt struct { Value KeepZero Unit string }
Apabila anda memanggil json.Marshal pada objek Pt, medan Nilai akan disiri menggunakan kaedah MarshalJSON tersuai, mengekalkan sifar di belakang jika perlu.
data, err := json.Marshal(Pt{40.0, "some_string"}) fmt.Println(string(data), err)
Ini akan menghasilkan output JSON berikut:
{"Value":40.0,"Unit":"some_string"}
Penyelesaian ini membolehkan anda mengekalkan sifar tertinggal dalam anda nombor terapung apabila mensirikannya kepada JSON, seperti yang diperlukan oleh aplikasi yang menggunakan.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Sifar Mengekor dalam Output JSON untuk Nombor Titik Terapung Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!