


Wie kann ich die JSON-Tag-Einschränkungen von Go mithilfe nicht exportierter Strukturen und Typumwandlung umgehen?
Dec 30, 2024 am 10:34 AMTypumwandlung in nicht exportierten Strukturen verwenden
In Go können Sie nicht mehrere JSON-Tags für dasselbe Feld in einer Struktur definieren. Es gibt jedoch eine Problemumgehung durch Umwandlung zwischen nicht exportierten Strukturen.
Erstellen Sie zunächst zwei identisch strukturierte Strukturen mit unterschiedlichen JSON-Tags, wie in Ihrem Beispiel:
type Foo struct { Name string `json:"name"` Age int `json:"age"` } type Bar struct { Name string `json:"employee_name"` // Age omitted with backtick syntax Age int `json:"-"` }
Machen Sie Bar jetzt nicht exportiert indem der Name mit einem Kleinbuchstaben beginnt:
type bar struct { Name string `json:"employee_name"` Age int `json:"-"` }
Um von Foo in bar umzuwandeln, wandeln Sie Foo in um *Bar, wie unten gezeigt:
f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) // b now has the modified JSON tags
Vorsichtsmaßnahmen:
- Diese Technik sollte vorsichtig und nur in einer kontrollierten Umgebung angewendet werden.
- Stellen Sie niemals den nicht exportierten Balkentyp außerhalb des aktuellen Pakets bereit.
- Stellen Sie sicher, dass die Typen immer ausgerichtet sind, da sonst der Guss erfolgt Panik.
Beispiel:
package main import "fmt" import "unsafe" type Foo struct { Name string `json:"name"` Age int `json:"age"` } type bar struct { Name string `json:"employee_name"` Age int `json:"-"` } func main() { f := Foo{Name: "Sam", Age: 20} b := (*bar)(unsafe.Pointer(&f)) fmt.Println(b.Name, b.Age) // Output: Sam 0 // Changing f.Age affects b.Age f.Age = 30 fmt.Println(b.Name, b.Age) // Output: Sam 30 }
Das obige ist der detaillierte Inhalt vonWie kann ich die JSON-Tag-Einschränkungen von Go mithilfe nicht exportierter Strukturen und Typumwandlung umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heißer Artikel

Hot-Tools-Tags

Heißer Artikel

Heiße Artikel -Tags

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Linter und statische Analyse -Tools verwenden, um die Qualität und Wartbarkeit meines GO -Codes zu verbessern?
