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