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

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-21 07:36:11939瀏覽

Why Doesn't Go's `json.Marshal` Work with Structs Containing Lowercase Field Names?

為什麼 Go 無法為具有小寫欄位名稱的結構產生 JSON?

首先,Go 使用大小寫約定來區分套件中的私有識別碼和公用識別碼。在提供的範例中,Machine 結構的欄位(m_ip、m_type 和 m_serial)是私有的。因此,它們無法被定義它們的套件外部的外部庫(如 json.Marshal)存取。

在第二個程式碼片段中將欄位名稱變更為大寫(MachIp、MachType 和 MachSerial)時,它們變得公開並可以匯出。這允許 json.Marshal 成功產生 JSON 表示。

但是,如果您喜歡使用小寫欄位名稱,則可以使用欄位標籤手動指定所需的 JSON 欄位名稱。例如:

type Machine struct {
    MachIp     string `json:"m_ip"`
    MachType   string `json:"m_type"`
    MachSerial string `json:"m_serial"`
}

透過使用 json 標籤註解字段,您實際上是指示 JSON 編碼器在產生 JSON 輸出時使用指定的欄位名稱。

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn