Go 結構體中的日期時間處理
在Go 中,當使用資料庫記錄填充結構體時,對可空日期時間列的處理可以成為挑戰。考慮以下結構:
type Reminder struct { Id int CreatedAt time.Time RemindedAt *time.Time SenderId int ReceiverId int }
在此範例中,RemindAt 表示為處理可為空值的指標。但是,這種方法需要在程式碼中區分非空值和空值,這可能很麻煩。
改進的解決方案
要解決此問題,請轉到提供pq.NullTime 或sql.NullTime (在Go 1.13 中)類型,它們提供了更優雅的方法:
type Reminder struct { Id int CreatedAt time.Time RemindedAt pq.NullTime // or sql.NullTime SenderId int ReceiverId int }
NullTime定義以下欄位:
type NullTime struct { Time time.Time Valid bool // Valid is true if Time is not NULL }
掃描資料庫記錄時,Valid 欄位指示 Time 是否具有有效的日期時間值或為空。
用法
將資料庫行掃描到提醒中struct:
row := db.QueryRow("...") err := row.Scan(&id, &reminder.CreatedAt, &reminder.RemindedAt, &senderId, &receiverId)
要存取RepaidAt 字段,請檢查Valid 字段:
if reminder.RemindedAt.Valid { // RemindedAt has a valid datetime value } else { // RemindedAt is null }
這種方法簡化了Go結構中可空日期時間列的處理,無需手動實現空檢查。
以上是如何有效處理 Go 結構中可為空的日期時間列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!