首页 > 后端开发 > Golang > 从 Go 访问 MongoDB 时如何处理日期转换?

从 Go 访问 MongoDB 时如何处理日期转换?

Mary-Kate Olsen
发布: 2024-11-23 11:00:56
原创
521 人浏览过

How to Handle Date Conversions When Accessing MongoDB from Go?

从 Go 访问 MongoDB:使用日期

从 Go 访问 MongoDB 时,您可能会遇到需要转换数据类型的情况,例如处理存储为MongoDB 中的字符串,但要求它们作为 Go time.Time 对象。以下是解决此问题的方法:

自定义编组/解组逻辑

要在 MongoDB 和 Go 之间编组/解组期间处理类型转换,请使用 bson.Getter 和 bson.Setter 接口实现自定义逻辑。

自定义 clientConfigData

首先,使用扩展 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
}
登录后复制

说明

  • SetBSON():解析EndDateStr字段,将EndDate字段设置为time.Time。
  • GetBSON():转换EndDate 为之前指定格式的字符串

避免堆栈溢出

为了避免堆栈溢出,请在两个方法中创建一个新的中间 my 类型,从而允许转换而无需无限递归。

此自定义封送处理解组逻辑使您能够在字符串和时间之间转换日期。从 Go 访问 MongoDB 时的时间格式。

以上是从 Go 访问 MongoDB 时如何处理日期转换?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板