Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Redigo ScanStruct随时间发生错误。时间_Go_Redis - Fatal编程技术网

Redigo ScanStruct随时间发生错误。时间

Redigo ScanStruct随时间发生错误。时间,go,redis,Go,Redis,我正在尝试使用redigo的ScanStruct读取一个具有time.time类型字段的结构,这给了我以下错误:无法从Redis批量字符串转换为time.time 只有这样,才能创建我自己的time类型,扩展time.time并实现rediscan?这听起来也很糟糕…因为Redis没有时间值的概念,所以像redigo这样的通用驱动程序在builintime.time类型和任意字节数组之间执行一些自动转换是没有意义的。因此,由程序员决定如何执行转换 例如,假设定义了“Person”类型,包括在时间

我正在尝试使用redigo的ScanStruct读取一个具有
time.time
类型字段的结构,这给了我以下错误:
无法从Redis批量字符串转换为time.time


只有这样,才能创建我自己的
time
类型,扩展
time.time
并实现
rediscan
?这听起来也很糟糕…

因为Redis没有时间值的概念,所以像redigo这样的通用驱动程序在builin
time.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)

实现一个解析您期望的时间格式的方法有什么不好呢?如果您展示了您试图解决的更大的问题,我们可能能够提供一些关于如何继续的建议。