错误-Redigo.Scan:无法从Redis批量字符串转换为* string

时间:2019-12-19 07:51:00

标签: go redis redigo

我有一个struct这样的人

type User struct {
    Nickname  *string `json:"nickname"`
    Phone     *string `json:"phone"`
}

使用HMSET命令将值放在redis中。 (值可以为零)

现在我正在尝试将值scan转换为结构:

values, err := redis.Values(Cache.Do("HMGET", "key", "nickname", "phone" )

var usr User

_, err := redis.Scan(values, &usr.Nickname, &usr.Phone)

但是我得到一个错误

  

redigo.Scan:无法分配给目标0:无法从Redis批量转换   字符串到* string

请告诉我我在做什么错?

2 个答案:

答案 0 :(得分:0)

doc中,它表示[]byte是批量字符串的类型,而不是*string。您在这里有两个选择:

  1. 将特定字段类型更改为[]byte
  2. 或在扫描中使用[]byte类型的临时变量,然后在检索到数据后将其存储到结构的字段中

答案 1 :(得分:0)

Scan documentation说:

  

dest指向的值必须是整数,浮点数,布尔值,字符串,[]字节,接口{}或这些类型的切片。

应用程序将指向*string的指针传递给函数。 *string不是受支持的类型之一。

有两种方法可以解决此问题。第一种是分配string值,并将指向分配的string值的指针传递给Scan:

usr := User{Nickname: new(string), Phone: new(string)}
_, err := redis.Scan(values, usr.Nickname, usr.Phone)

第二种方法是将结构字段的类型更改为string

type User struct {
    Nickname  string `json:"nickname"`
    Phone     string `json:"phone"`
}

...

var usr User
_, err := redis.Scan(values, &usr.Nickname, &usr.Phone)