Beim Zugriff auf MongoDB von Go aus kann es vorkommen, dass Sie Datentypen konvertieren müssen, z. B. bei der Handhabung von Datumsangaben, die als gespeichert sind Zeichenfolgen in MongoDB, die jedoch als Go time.Time-Objekte erforderlich sind. So beheben Sie dieses Problem:
Um Typkonvertierungen während des Marshallings/Unmarshalings zwischen MongoDB und Go zu verarbeiten, implementieren Sie benutzerdefinierte Logik mithilfe der Schnittstellen bson.Getter und bson.Setter.
Erweitern Sie zunächst clientConfigData um ein zusätzliches Feld EndDate vom Typ time.Time:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
Benutzerdefinierte Marshal-/Unmarshal-Logik in den Methoden SetBSON() und GetBSON() implementieren:
const endDateLayout = "2006-01-02 15:04:05" 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 }
Um Stapel zu vermeiden Überlauf: Erstellen Sie innerhalb beider Methoden einen neuen Zwischentyp, der eine Konvertierung ohne endlose Rekursion ermöglicht.
Dieses benutzerdefinierte Marshalling und Unmarshaling Mit der Logik können Sie Datumsangaben zwischen Zeichenfolgen- und Zeitformaten konvertieren, wenn Sie von Go aus auf MongoDB zugreifen.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit Datumskonvertierungen um, wenn ich von Go aus auf MongoDB zugreife?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!