首頁 >後端開發 >Golang >如何在 Go 中設定文件插入的預設日期和時間?

如何在 Go 中設定文件插入的預設日期和時間?

Linda Hamilton
Linda Hamilton原創
2024-12-08 04:15:141047瀏覽

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn