In Go stoßen Entwickler häufig auf Szenarien, in denen sie benutzerdefinierte Marshalling- und Unmarshalling-Funktionen für komplexe Datenstrukturen benötigen. Bei der Arbeit mit BSON, dem binären Datenformat von MongoDB, besteht die Notwendigkeit eines benutzerdefinierten Marshallings. Der Artikel stellt das Konzept der Definition von benutzerdefiniertem BSON-Marshalling über die Getter- und Setter-Schnittstellen vor.
Die Frage konzentriert sich insbesondere darauf, wie man benutzerdefiniertes BSON-Marshalling für eine Währungsstruktur schreibt, die einen Währungswert und einen Währungscode kapselt. Die Methoden MarshalJSON und UnmarshalJSON werden als effektive Ansätze für benutzerdefiniertes JSON-Marshalling und Unmarshalling demonstriert. Allerdings kann es eine Herausforderung sein, Dokumentation zum BSON-Marshalling zu finden.
Um benutzerdefiniertes BSON-Marshalling zu erreichen, muss die Währungsstruktur die Schnittstellen bson.Getter und bson.Setter implementieren. Die GetBSON-Methode gibt eine BSON-freundliche Darstellung der Währungsstruktur zurück und die SetBSON-Methode legt den Wert der Währungsstruktur basierend auf den bereitgestellten BSON-Daten fest. Der folgende Code demonstriert diese Implementierungen:
type Currency struct { value decimal.Decimal //The actual value of the currency. currencyCode string //The ISO currency code. } // GetBSON implements bson.Getter. func (c Currency) GetBSON() (interface{}, error) { f := c.Value().Float64() return struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }{ Value: f, CurrencyCode: c.currencyCode, }, nil } // SetBSON implements bson.Setter. func (c *Currency) SetBSON(raw bson.Raw) error { decoded := new(struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }) bsonErr := raw.Unmarshal(decoded) if bsonErr == nil { c.value = decimal.NewFromFloat(decoded.Value) c.currencyCode = decoded.CurrencyCode return nil } else { return bsonErr } }
Durch die Implementierung dieser Methoden können Entwickler jetzt die Währungsstruktur nahtlos mit MongoDB verwenden und so ein benutzerdefiniertes Marshalling und Unmarshalling von Währungsdaten ermöglichen.
Das obige ist der detaillierte Inhalt vonWie implementiert man benutzerdefiniertes BSON-Marshalling für eine Go-Struktur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!