首页  >  文章  >  后端开发  >  如何使用 Go 为 Mongoose 中的日期字段设置默认当前时间戳?

如何使用 Go 为 Mongoose 中的日期字段设置默认当前时间戳?

Susan Sarandon
Susan Sarandon原创
2024-11-25 10:10:47773浏览

How Can I Set a Default Current Timestamp for a Date Field in Mongoose Using Go?

使用 Mgo 自定义默认日期

在 Mongoose 中,可以使用默认的 Date.now 值定义模式。然而,在 Go 中,字段不允许使用默认值,因此需要一种不同的方法。

构造函数

一种解决方案是创建一个类似构造函数的函数函数,例如 NewUser(),它将 CreatedAt 字段设置为当前时间:

func NewUser() *User {
    return &User{
        CreatedAt: time.Now(),
    }
}

但是,此方法不会通过此函数强制创建新实例,或在保存实例时为实例添加时间戳。

自定义封送处理

更强大的解决方案包括通过 bson 实现自定义封送逻辑。吸气剂接口。这允许在保存之前修改存储的值:

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

func (u *User) GetBSON() (interface{}, error) {
    u.CreatedAt = time.Now()
    type my *User
    return my(u), nil
}

在 GetBSON() 方法中,CreatedAt 字段将更新为当前时间。为了避免堆栈溢出,引入了一种新类型 my。这个新类型不会继承 bson.Getter 实现,从而打破了递归循环。

可以添加额外的检查以确保 CreatedAt 字段仅在最初为空时才被设置:

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

以上是如何使用 Go 为 Mongoose 中的日期字段设置默认当前时间戳?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn