猿问

Golang DB反/序列化方法(数据库/sql之上的sqlx)

Timestamp在数据库中有一个列和一个结构,该结构的类型int64应该将该列加载为整数时间戳。

询问:

select date from table;

错误:

sql: Scan error on column index 1, name "date": converting driver.Value type time.Time ("2019-04-14 21:49:59.159317 +0000 +0000") to a int64: invalid syntax

有没有办法在结构上定义序列化方法,而不是将时间戳转换int64为查询级别(extract epoch...)。


慕田峪9158850
浏览 200回答 1
1回答

料青山看我应如是

您需要一个自定义int64类型,以便您可以让它实现sql.Scanner接口。type Timestamp int64func (ts *Timestamp) Scan(src interface{}) error {    switch v := src.(type) {    case time.Time:        *ts = Timestamp(v.Unix())    case []byte:        // ...    case string:        // ...    }    return nil}有了这个,您可以在扫描结果时使用转换:type Record struct {    Date int64}var r Recordif err := db.QueryRow("select data from table").Scan((*Timestamp)(&r.Date)); err != nil {    panic(err)}或者您可以在结构定义中更改字段的类型,然后您可以直接扫描到该字段:type Record struct {    Date Timestamp}var r Recordif err := db.QueryRow("select data from table").Scan(&r.Date); err != nil {    panic(err)}
随时随地看视频慕课网APP

相关分类

Go
我要回答