插入有Time.Time 欄位的文件時設定預設日期
在mongoose 中,為日期欄位設定預設值很簡單,但是在使用mgo 的Go 中,情況有點不同。
為什麼不能設定預設值Go 中的欄位?
Go 不允許欄位使用預設值。創建後,它們將具有其類型的零值。
解決方案 1:類別建構子
一種方法是建立一個類別建構函數,初始化 CreatedAt 欄位。但是,它不處理時間戳需要與資料庫時間戳匹配的情況。
解決方案 2:自訂封送邏輯
更好的解決方案涉及實現自訂 bson。 Getter 邏輯。
GetBSON()函數
Go 實作中的 GetBSON() 函數提供了一個要儲存的值。在本例中,我們希望在儲存之前將 CreatedAt 欄位設定為目前時間。
func (u *User) GetBSON() (interface{}, error) { u.CreatedAt = time.Now() type my *User return my(u), nil }
建立新類型
請注意,一個新類型,我的, 創建並返回以防止無限遞歸。
處理現有的記錄
新增檢查可確保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中文網其他相關文章!