首頁  >  文章  >  後端開發  >  如何使用 Go 為 Mongoose 中的日期欄位設定預設目前時間戳記?

如何使用 Go 為 Mongoose 中的日期欄位設定預設目前時間戳記?

Susan Sarandon
Susan Sarandon原創
2024-11-25 10:10:47772瀏覽

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