Typumwandlung 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:
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!