Heim >Backend-Entwicklung >Golang >Warum enthält „json.Marshal' von Go keine Strukturfelder mit Namen in Kleinbuchstaben?

Warum enthält „json.Marshal' von Go keine Strukturfelder mit Namen in Kleinbuchstaben?

Linda Hamilton
Linda HamiltonOriginal
2024-12-25 01:21:11251Durchsuche

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

Warum gelingt es Golang nicht, JSON aus einer Struktur mit kleingeschriebenem Anfangszeichen zu generieren?

Beim Versuch, eine Struktur in JSON zu marshallen, können Entwickler auf ein unerwartetes Problem stoßen, bei dem die Das Ergebnis wird als leeres Objekt zurückgegeben. Dieses Verhalten ist darauf zurückzuführen, dass Go die Groß-/Kleinschreibung verwendet, um zwischen privaten und öffentlichen Bezeichnern zu unterscheiden.

Im bereitgestellten Beispiel verfügt die Strukturmaschine über Felder mit Kleinbuchstaben am Anfang:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}

Standardmäßig Go betrachtet Bezeichner mit kleingeschriebenen Anfangszeichen als privat. Dies bedeutet, dass die Felder in Machine für json.Marshal nicht sichtbar sind, da sie nicht Teil desselben Pakets wie der Code sind.

Um dieses Problem zu beheben, können Entwickler die Feldnamen in Großbuchstaben ändern sie öffentlich:

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}

Wenn Entwickler jedoch Kleinbuchstaben-Bezeichner in der JSON-Ausgabe beibehalten möchten, können sie JSON verwenden Tags:

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

Durch Hinzufügen von json:"m_ip" zum MachIp-Feld enthält der resultierende JSON beispielsweise die gewünschte Kleinbuchstaben-ID. Dies wird erreicht, weil das JSON-Tag das standardmäßige Fallverhalten überschreibt.

Das obige ist der detaillierte Inhalt vonWarum enthält „json.Marshal' von Go keine Strukturfelder mit Namen in Kleinbuchstaben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn