首页 >后端开发 >Golang >如何有效处理 Go 结构中可为空的日期时间列?

如何有效处理 Go 结构中可为空的日期时间列?

DDD
DDD原创
2024-12-19 19:00:21810浏览

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
}

这种方法简化了 Go 结构中可空日期时间列的处理,无需手动实现空检查。

以上是如何有效处理 Go 结构中可为空的日期时间列?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn