gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 22:14:06 26 4
gpt4 key购买 nike

我有一个 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...)。

最佳答案

您需要自定义 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)
}

关于database - Golang DB反/序列化方法(数据库/sql之上的sqlx),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61515992/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com