一尘不染

空时间

go

我有一个打算用数据库记录填充的结构,datetime列之一为可为空:

type Reminder struct {
    Id         int
    CreatedAt  time.Time
    RemindedAt *time.Time
    SenderId   int
    ReceiverId int
}

由于指针可以是nil,所以我做了RemindedAt一个指针,但这需要代码知道At变量之间的区别。有没有更优雅的方式来解决这个问题?


阅读 243

收藏
2020-07-02

共1个答案

一尘不染

您可以使用pq.NullTime,或者在Go
1.13中,现在可以使用标准库的sql.NullTime类型。

从github上的lib /
pq

type NullTime struct {
    Time  time.Time
    Valid bool // Valid is true if Time is not NULL
}

// Scan implements the Scanner interface.
func (nt *NullTime) Scan(value interface{}) error {
    nt.Time, nt.Valid = value.(time.Time)
    return nil
}

// Value implements the driver Valuer interface.
func (nt NullTime) Value() (driver.Value, error) {
    if !nt.Valid {
        return nil, nil
    }
    return nt.Time, nil
}
2020-07-02