當嘗試將結構體編組為 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中文網其他相關文章!