Heim > Backend-Entwicklung > Golang > Warum serialisiert „json.Marshal()' von Go Strukturfelder nicht mit Kleinbuchstaben-Präfixen?

Warum serialisiert „json.Marshal()' von Go Strukturfelder nicht mit Kleinbuchstaben-Präfixen?

Mary-Kate Olsen
Freigeben: 2024-12-21 21:44:46
Original
544 Leute haben es durchsucht

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

Untersuchung der JSON-Generierungsbeschränkungen für Strukturfelder mit Kleinbuchstaben-Präfixen in Go

In Go stoßen Entwickler beim Versuch, JSON daraus zu generieren, häufig auf ein Problem Strukturen, die Felder mit kleingeschriebenen Präfixzeichen besitzen. Um dieses Problem effektiv zu lösen, ist es wichtig, den zugrunde liegenden Grund zu verstehen.

Das Problem entsteht aufgrund der Go-Konvention zur Identifizierung öffentlicher Bezeichner innerhalb eines Pakets. Bezeichner mit einem Großbuchstaben am Anfang gelten als öffentlich und können außerhalb des Pakets abgerufen werden. Umgekehrt gelten Bezeichner mit einem Anfangsbuchstaben in Kleinbuchstaben als privat und sind nur innerhalb des aktuellen Pakets sichtbar.

Beachten Sie den folgenden Codeausschnitt:

type Machine struct {
  m_ip string
  m_type string
  m_serial string
}
Nach dem Login kopieren

Beim Versuch, JSON aus einer Instanz von zu generieren Wenn Sie diese Struktur mit json.Marshal() verwenden, erhalten Sie möglicherweise ein unerwartetes Ergebnis von nur „{}“. Dies liegt daran, dass die Felder m_ip, m_type und m_serial für json.Marshal() nicht sichtbar sind, da sie als privat gelten (angezeigt durch die Kleinbuchstaben-Präfixe).

Ändern Sie die Felder jedoch in Großbuchstaben, wie unten gezeigt , wird das Problem beheben:

type Machine struct {
  MachIp string
  MachType string
  MachSerial string
}
Nach dem Login kopieren

Durch die Verwendung von Präfixen in Großbuchstaben machen Sie diese Felder öffentlich zugänglich und ermöglichen so json.Marshal() um die gewünschte JSON-Ausgabe erfolgreich zu generieren.

Wenn Sie in Ihrer JSON-Ausgabe Bezeichner in Kleinbuchstaben benötigen, können Sie Feld-Tagging verwenden. Indem Sie jedes Feld mit dem entsprechenden JSON-Namen versehen, können Sie das Standardverhalten überschreiben. Zum Beispiel:

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

Durch diesen Tagging-Mechanismus können Sie die gewünschten JSON-Feldnamen unabhängig von der anfänglichen Groß-/Kleinschreibung explizit angeben und so JSON-Ausgaben erstellen, die den Anforderungen Ihrer Anwendung entsprechen.

Das obige ist der detaillierte Inhalt vonWarum serialisiert „json.Marshal()' von Go Strukturfelder nicht mit Kleinbuchstaben-Präfixen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage