Rumah >pembangunan bahagian belakang >Golang >Mengapa `json.Marshal()` Go Tidak Mensiri Medan Struktur dengan Awalan Huruf Kecil?
Meneroka Sekatan Penjanaan JSON untuk Medan Struktur dengan Awalan Huruf Kecil dalam Go
Dalam Go, pembangun kerap menghadapi masalah semasa cuba menjana JSON daripada struct yang mempunyai medan dengan aksara awalan huruf kecil. Memahami sebab asas adalah penting untuk menyelesaikan masalah ini dengan berkesan.
Isu ini timbul disebabkan oleh konvensyen Go untuk mengenal pasti pengecam awam dalam pakej. Pengecam dengan huruf awal huruf besar dianggap awam dan boleh diakses di luar pakej. Sebaliknya, pengecam dengan huruf awal huruf kecil dianggap peribadi dan hanya boleh dilihat dalam pakej semasa.
Pertimbangkan coretan kod berikut:
type Machine struct { m_ip string m_type string m_serial string }
Apabila cuba menjana JSON daripada contoh struct ini menggunakan json.Marshal(), anda mungkin menghadapi hasil yang tidak dijangka hanya "{}." Ini kerana medan m_ip, m_type dan m_serial tidak kelihatan kepada json.Marshal() kerana ia dianggap peribadi (ditunjukkan oleh awalan huruf kecil).
Walau bagaimanapun, menukar medan kepada huruf besar, seperti yang dilihat di bawah , akan menyelesaikan isu:
type Machine struct { MachIp string MachType string MachSerial string }
Dengan menggunakan awalan huruf besar, anda menjadikan medan ini secara terbuka boleh diakses, membenarkan json.Marshal() berjaya menjana output JSON yang diingini.
Jika anda memerlukan pengecam huruf kecil dalam output JSON anda, anda boleh menggunakan pengetegan medan. Dengan menganotasi setiap medan dengan nama JSON yang sepadan, anda boleh mengatasi tingkah laku lalai. Contohnya:
type Machine struct { MachIp string `json:"m_ip"` MachType string `json:"m_type"` MachSerial string `json:"m_serial"` }
Melalui mekanisme penandaan ini, anda boleh menentukan secara eksplisit nama medan JSON yang diingini, tanpa mengira huruf awalnya, sekali gus membolehkan anda mencipta output JSON yang selaras dengan keperluan aplikasi anda.
Atas ialah kandungan terperinci Mengapa `json.Marshal()` Go Tidak Mensiri Medan Struktur dengan Awalan Huruf Kecil?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!