Unmarshaling in eine Schnittstelle{} und Typzusicherung durchführen
Beim Empfang von Nachrichten über ein RabbitMQ-System und der Durchführung der Typzusicherung ist es wichtig zu verstehen die Typen, die vom JSON-Paket entmarshaled werden.
Standard-Unmarshaling Typen
Standardmäßig gibt json.Unmarshal die folgenden Werte zurück Typen:
Unmarshaling in eine Schnittstelle{}
Beim Unmarshaling in eine Schnittstelle{} ist der zurückgegebene Wert eine generische Map[string]schnittstelle{}. Um den tatsächlichen Typ innerhalb der Karte zu bestimmen, können Sie entweder:
Beispiel für die Verwendung einer Wrapper-Struktur
Um das manuelle Entpacken von Daten zu vermeiden, sollten Sie die Verwendung in Betracht ziehen eine Wrapper-Struktur wie die folgende:
type Unpacker struct { Data interface{} } func (u *Unpacker) UnmarshalJSON(b []byte) error { smth1 := &Something1{} err := json.Unmarshal(b, smth1) if err == nil & smth1.Thing != "" { u.Data = smth1 return nil } if _, ok := err.(*json.UnmarshalTypeError); err != nil & !ok { return err } smth2 := &Something2{} err = json.Unmarshal(b, smth2) if err != nil { return err } u.Data = smth2 return nil }
Mit dieser Wrapper-Struktur können Sie Daten je nach Art der empfangenen Daten entweder in Something1 oder Something2 entmarshalieren.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit der Typzusicherung um, nachdem ich JSON in einer „Schnittstelle{}' in Go entmarshalingt habe?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!