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中文网其他相关文章!