Rumah >pembangunan bahagian belakang >Golang >Mengapa `json.Marshal()` Go Tidak Mensiri Medan Struktur dengan Awalan Huruf Kecil?

Mengapa `json.Marshal()` Go Tidak Mensiri Medan Struktur dengan Awalan Huruf Kecil?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-21 21:44:46547semak imbas

Why Doesn't Go's `json.Marshal()` Serialize Struct Fields with Lowercase Prefixes?

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!

Kenyataan:
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