Redigo ScanStruct随时间发生错误。时间
我正在尝试使用redigo的ScanStruct读取一个具有Redigo ScanStruct随时间发生错误。时间,go,redis,Go,Redis,我正在尝试使用redigo的ScanStruct读取一个具有time.time类型字段的结构,这给了我以下错误:无法从Redis批量字符串转换为time.time 只有这样,才能创建我自己的time类型,扩展time.time并实现rediscan?这听起来也很糟糕…因为Redis没有时间值的概念,所以像redigo这样的通用驱动程序在builintime.time类型和任意字节数组之间执行一些自动转换是没有意义的。因此,由程序员决定如何执行转换 例如,假设定义了“Person”类型,包括在时间
time.time
类型字段的结构,这给了我以下错误:无法从Redis批量字符串转换为time.time
只有这样,才能创建我自己的
time
类型,扩展time.time
并实现rediscan
?这听起来也很糟糕…因为Redis没有时间值的概念,所以像redigo这样的通用驱动程序在builintime.time
类型和任意字节数组之间执行一些自动转换是没有意义的。因此,由程序员决定如何执行转换
例如,假设定义了“Person”类型,包括在时间戳处创建的格式为的时间戳,则可以使用“rediscan”方法定义自定义“timestamp”类型,如下所示:
type Timestamp time.Time
type Person struct {
Id int `redis:"id"`
Name string `redis:"name"`
CreatedAt Timestamp `redis:"created_at"`
}
func (t *Timestamp) RedisScan(x interface{}) error {
bs, ok := x.([]byte)
if !ok {
return fmt.Errorf("expected []byte, got %T", x)
}
tt, err := time.Parse(time.RFC3339, string(bs))
if err != nil {
return err
}
*t = Timestamp(tt)
return nil
}
// ...
response, err := redis.Values(conn.Do("HGETALL", "person:1"))
if err != nil {
panic(err)
}
var p Person
err = redis.ScanStruct(response, &p)
if err != nil {
panic(err)
}
log.Printf("OK: p=%v", p)
实现一个解析您期望的时间格式的方法有什么不好呢?如果您展示了您试图解决的更大的问题,我们可能能够提供一些关于如何继续的建议。