Zugriff auf MongoDB von Go aus: Benutzerdefiniertes Daten-Marshalling und Unmarshalling
Beim Zugriff auf MongoDB mit Go können Sie auf Szenarien stoßen, in denen die im Der Typ der Datenbank unterscheidet sich von dem, den Sie in Ihren Go-Strukturen definiert haben. Beispielsweise kann Ihr MongoDB-Datumsfeld als Zeichenfolge gespeichert werden, während Ihre Go-Struktur einen time.Time-Wert erwartet.
Um dieses Problem zu beheben, bietet Go die Möglichkeit, benutzerdefinierte Daten-Marshalling- und Unmarshalling-Logik zu implementieren. Durch Anpassen dieser Logik können Sie Typkonvertierungen durchführen oder während des Datenaustauschs zwischen MongoDB und Ihren Go-Strukturen spezifische Formatierungen anwenden.
Eine Möglichkeit, benutzerdefinierte Logik zu implementieren, besteht darin, eigene Typen zu definieren, die bson.Getter und bson implementieren .Setter-Schnittstellen. Mit diesen Schnittstellen können Sie den Marshalling- und Unmarshalling-Prozess steuern. Beispielsweise können Sie Ihren clientConfigData-Typ um ein zusätzliches Feld vom Typ time.Time mit dem Namen EndDate:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
erweitern. Das bson:"-"-Tag gibt an, dass das EndDate-Feld nicht in MongoDB beibehalten werden soll.
Als nächstes implementieren Sie die Methoden GetBSON und SetBSON, um benutzerdefiniertes Marshalling und Unmarshalling zu handhaben:
func (c *clientConfigData) SetBSON(raw bson.Raw) (err error) { type my clientConfigData if err = raw.Unmarshal((*my)(c)); err != nil { return } c.EndDate, err = time.Parse(endDateLayout, c.EndDateStr) return } func (c *clientConfigData) GetBSON() (interface{}, error) { c.EndDateStr = c.EndDate.Format(endDateLayout) type my *clientConfigData return my(c), nil }
In SetBSON() werden die Rohdaten in den benutzerdefinierten Typ my entmarshallt. Anschließend wird das EndDateStr-Feld in einen time.Time-Wert geparst und EndDate zugewiesen.
In GetBSON() wird das EndDateStr-Feld von EndDate aufgefüllt und dann der benutzerdefinierte Typ my zurückgegeben. Dies zeigt an, dass die Daten bereit sind, in MongoDB gemarshallt und gespeichert zu werden.
Durch die Implementierung dieser benutzerdefinierten Marshalling- und Unmarshalling-Logik können Sie die Typdiskrepanz zwischen MongoDB und Ihren Go-Strukturen überbrücken und so Daten nahtlos dazwischen manipulieren die beiden Plattformen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Typunterschieden um, wenn ich von Go aus auf MongoDB zugreife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!