可以考虑的时间。在golang中的时间

时间:2014-07-03 23:20:57

标签: time go null

我有一个结构,我打算用数据库记录填充,其中一个日期时间列可以为空:

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

由于指针可以是nil,我已经将RemindedAt作为指针,但这需要代码知道At变量之间的差异。有没有更优雅的方式来处理这个?

4 个答案:

答案 0 :(得分:58)

您可以使用pq.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
}

答案 1 :(得分:6)

我喜欢lib / pq中的NullTime示例。我这样调整了它,因此可以将NullTime视为Time ...

type NullTime struct {
    time.Time
    Valid bool
}

答案 2 :(得分:3)

也可能要检查go-sql-driver实现,这与上面推荐的基本相同。 this website

答案 3 :(得分:1)

mysql.NullTime被描述https://github.com/go-sql-driver/mysql/issues/960 从Go1.13开始,数据库/ sql将具有NullTime类型,应改为使用 https://github.com/golang/go/issues/30305