2015-12-11 3 views
3

Использование gorm и go-sqlite3. Открытие моего db с помощью gorm.Open("sqlite3", "/dev.db?charset=utf8&parseTime=true").Как разбирать * время. Время от sql в golang?

Попытка выполнить

db.Raw("SELECT * from users;").Scan(&users) 
// models.User has a deleted_at column that is of the type *time.Time 
// I am getting Scan error on column index 1: unsupported driver -> Scan pair: []uint8 -> *time.Time 

Как разобрать SQL в * time.Time?

структура пользователя

type User struct { 
    ID  uint64 `gorm:"primary_key"` 
    Name  sql.NullString 
    CreatedAt time.Time 
    UpdatedAt time.Time 
    DeletedAt *time.Time 
} 
+0

Как ваши пользователи? – holys

+0

Имеет ли [эта проблема] (https://github.com/jinzhu/gorm/issues/18#issuecomment-29351315) какая-либо помощь для вас? – holys

+0

@holys К сожалению, нет. Я считаю, что это решение для тех, кто использует 'mysql' db. – Derek

ответ

5

Библиотека/рд реализует NullTime тип для этого. Он определяет интерфейс сканера на время. Тип времени, который может быть нулевым. Вы можете использовать его в обмен на *time.Time.

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 
} 
Смежные вопросы