我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...)。
1 回答
料青山看我应如是
TA贡献1772条经验 获得超8个赞
您需要一个自定义int64类型,以便您可以让它实现sql.Scanner接口。
type Timestamp int64
func (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 Record
if err := db.QueryRow("select data from table").Scan((*Timestamp)(&r.Date)); err != nil {
panic(err)
}
或者您可以在结构定义中更改字段的类型,然后您可以直接扫描到该字段:
type Record struct {
Date Timestamp
}
var r Record
if err := db.QueryRow("select data from table").Scan(&r.Date); err != nil {
panic(err)
}
- 1 回答
- 0 关注
- 199 浏览
添加回答
举报
0/150
提交
取消