首頁 > 後端開發 > Golang > 如何有效處理 Go 結構中可為空的日期時間列?

如何有效處理 Go 結構中可為空的日期時間列?

DDD
發布: 2024-12-19 19:00:21
原創
837 人瀏覽過

How Can I Efficiently Handle Nullable Datetime Columns in Go Structs?

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
}
登入後複製
要存取RepaidAt 字段,請檢查Valid 字段:

這種方法簡化了Go結構中可空日期時間列的處理,無需手動實現空檢查。

以上是如何有效處理 Go 結構中可為空的日期時間列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板