从 Go 访问 MongoDB 时,您可能会遇到需要转换数据类型的情况,例如处理存储为MongoDB 中的字符串,但要求它们作为 Go time.Time 对象。以下是解决此问题的方法:
要在 MongoDB 和 Go 之间编组/解组期间处理类型转换,请使用 bson.Getter 和 bson.Setter 接口实现自定义逻辑。
首先,使用扩展 clientConfigData time.Time 类型的附加字段 EndDate:
type clientConfigData struct { SMTPAssoc int `bson:"smtp_assoc"` PlanType string `bson:"plan_type"` EndDateStr string `bson:"end_date"` EndDate time.Time `bson:"-"` }
在 SetBSON() 和 GetBSON() 中实现自定义编组/解组逻辑方法:
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 }
为了避免堆栈溢出,请在两个方法中创建一个新的中间 my 类型,从而允许转换而无需无限递归。
此自定义封送处理解组逻辑使您能够在字符串和时间之间转换日期。从 Go 访问 MongoDB 时的时间格式。
以上是从 Go 访问 MongoDB 时如何处理日期转换?的详细内容。更多信息请关注PHP中文网其他相关文章!