为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪9158850 2022-06-01 15:48:05
我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)

}


查看完整回答
反对 回复 2022-06-01
  • 1 回答
  • 0 关注
  • 199 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信