首頁 > 後端開發 > Golang > 為什麼 Go 的 json.Marshal 不包含名稱小寫的結構體欄位?

為什麼 Go 的 json.Marshal 不包含名稱小寫的結構體欄位?

Linda Hamilton
發布: 2024-12-25 01:21:11
原創
257 人瀏覽過

Why Doesn't Go's `json.Marshal` Include Struct Fields with Lowercase Names?

為什麼 Golang 無法從首字母小寫的結構體產生 JSON?

當嘗試將結構體編組為 JSON 時,開發人員可能會遇到一個意外的問題,即結果會作為空物件傳回。此行為源自於 Go 使用大小寫來區分私有識別碼和公用識別碼。

在提供的範例中,struct Machine 具有首字母小寫字元的欄位:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}
登入後複製

預設情況下,Go將首字母小寫的識別碼視為私有識別碼。這意味著 Machine 中的欄位對 json.Marshal 不可見,因為它與程式碼不是相同套件的一部分。

要解決此問題,開發人員可以選擇將欄位名稱變更為大寫,從而使public:

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}
登入後複製

但是,如果開發人員希望在JSON 輸出中保留小寫標識符,他們可以使用JSON標籤:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}
登入後複製

例如,透過將json:"m_ip" 添加到MachIp 字段,產生的JSON 將包含所需的小寫標識符。這是因為 JSON 標籤覆蓋了預設的 case 行為。

以上是為什麼 Go 的 json.Marshal 不包含名稱小寫的結構體欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板