首页 > 后端开发 > Golang > 如何在 Go 中设置文档插入的默认日期和时间?

如何在 Go 中设置文档插入的默认日期和时间?

Linda Hamilton
发布: 2024-12-08 04:15:14
原创
1017 人浏览过

How to Set a Default Date and Time on Document Insertion in Go?

Go 中使用 Time.Time 字段设置文档插入的默认日期

在 Go 中,与 Node.js 中的 Mongoose 不同,默认值不能分配给结构定义中的字段。为了达到相同的结果,有多种方法可用。

一种方法是创建一个类似构造函数的函数,该函数实例化一个新结构并将 CreatedAt 字段设置为当前时间。然后可以利用此函数创建新用户,确保字段设置一致。

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}
登录后复制

但是,这种方法有局限性,因为它需要严格遵守使用此函数创建新用户并且不捕获文档插入的时间戳。

更通用的解决方案包括通过实现 bson.Getter 接口来实现自定义封送逻辑。 GetBSON() 方法允许修改数据库中存储的值。

type User struct {
    CreatedAt time.Time `json:"created_at" bson:"created_at"`
}

func (u *User) GetBSON() (interface{}, error) {
    if u.CreatedAt.IsZero() {
        u.CreatedAt = time.Now()
    }
    type my *User
    return my(u), nil
}
登录后复制

此方法检查 CreatedAt 字段是否为空,如果为空,则将其设置为当前时间。它还通过返回不实现 bson.Getter 接口的新类型来避免堆栈溢出。

这种方法确保每当保存文档时 CreatedAt 字段都会自动更新,如果该字段已经包含,则不会覆盖它一个值。它提供了更大的灵活性,并与文档插入期间设置默认值的预期行为保持一致。

以上是如何在 Go 中设置文档插入的默认日期和时间?的详细内容。更多信息请关注PHP中文网其他相关文章!

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