Обнуляемое время. Время в Голанге

У меня есть структура, которую я намереваюсь заполнить записью базы данных, один из столбцов datetime обнуляется:

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

Так как указатели могут быть nil, Я сделал RemindedAt указатель, но для этого потребуется код, чтобы узнать разницу между At переменные. Есть ли более элегантный способ справиться с этим?

3 ответа

Решение

Ты можешь использовать pq.NullTime,

Из lib / pq на github:

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
}

Мне нравится NullTime пример из lib/pq. Я настроил это так, чтобы NullTime можно рассматривать как Time...

type NullTime struct {
    time.Time
    Valid bool
}

Возможно, вам также понадобится проверить реализацию go-sql-driver, что, в сущности, совпадает с рекомендацией выше. https://godoc.org/github.com/go-sql-driver/mysql

Mysql .NullTime не поддерживается https://github.com/go-sql-driver/mysql/issues/960 database / sql будет иметь тип NullTime начиная с Go1.13 и далее, который следует использовать вместо https://github.com/golang/go/issues/30305

Другие вопросы по тегам