Benutzerdefiniertes BSON-Marshalling: Äquivalente für benutzerdefiniertes JSON-Marshalling
Um benutzerdefiniertes BSON-Marshalling zu erreichen, ähnlich dem benutzerdefinierten JSON-Marshalling, das mit der Währungsstruktur demonstriert wurde können Sie die Schnittstellen bson.Getter und bson.Setter verwenden. Diese Schnittstellen ermöglichen die Anpassung der Art und Weise, wie Werte im BSON-Format kodiert und dekodiert werden.
Implementieren eines benutzerdefinierten BSON-Getters und -Setters
Die Währungsstruktur kann aktualisiert werden, um das zu implementieren Die Schnittstellen von bson.Getter und bson.Setter sind wie folgt:
// Currency struct implements bson.Getter and bson.Setter type Currency struct { value decimal.Decimal currencyCode string } // GetBSON implements bson.Getter. func (c Currency) GetBSON() (interface{}, error) { value := c.Value().Float64() return struct { Value float64 `json:"value" bson:"value"` CurrencyCode string `json:"currencyCode" bson:"currencyCode"` }{ Value: value, 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 { return bsonErr } c.value = decimal.NewFromFloat(decoded.Value) c.currencyCode = decoded.CurrencyCode return nil }
Benutzerdefiniert verwenden BSON-Marshalling in übergeordneten Strukturen
Sobald die Währungsstruktur aktualisiert wird, verwendet die Produktstruktur, die das Währungsfeld einbettet, ähnlich wie das benutzerdefinierte JSON-Marshalling automatisch das benutzerdefinierte Marshalling, wenn mgo.Marshal oder bson aufgerufen wird. Kodieren. Der Ausgabe-BSON enthält die gewünschten Feldnamen und Datenwerte, ohne dass eine separate Struktur mit exportierten Feldern erforderlich ist.
Das obige ist der detaillierte Inhalt vonWie erreicht man in Go ein benutzerdefiniertes BSON-Marshaling, ähnlich dem benutzerdefinierten JSON-Marshalling?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!