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中文网其他相关文章!