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