在Go 中使用結構處理可為空時間值
在處理可能包含可為空時間值的資料結構時,確保正確處理非常重要這些值。考慮以下結構:
type Reminder struct { Id int CreatedAt time.Time RemindedAt *time.Time SenderId int ReceiverId int }
這裡,RemindAt 欄位被宣告為指向 time.Time 的指針,因為它有可能為 null。然而,這種差異要求程式碼能夠處理 CreatedAt 和 RemindAt 之間的差異。
為了解決這個問題,Go 提供了幾種方法來優雅地處理可為null 的時間值:
使用pq.NullTime
PostgreSQL Go 驅動程式中的pq 套件提供了pq.NullTime 類型。它由一個 time.Time 值和一個 Valid 布林標誌組成,指示時間是否有效(不為 NULL)。
import "github.com/lib/pq" type Reminder struct { Id int CreatedAt time.Time RemindedAt pq.NullTime SenderId int ReceiverId int }
在這種情況下,RemindAt 是一個 pq.NullTime 值,程式碼可以檢查它的有效標誌來決定是否設定了時間。
使用sql.NullTime (Go 1.13 和上)
從Go 1.13 開始,標準庫引入了sql.NullTime 類型,它的用途與pq.NullTime 類似。
import "database/sql" type Reminder struct { Id int CreatedAt time.Time RemindedAt sql.NullTime SenderId int ReceiverId int }
pq.NullTime 和sql.NullTime 實作了必要的介面來支援資料庫掃描和參數綁定,方便與資料庫操作一起使用。
以上是如何最好地處理 Go 結構中的可空時間值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!