0

I have a struct like that

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

Values ​​are placed in redis with HMSET command. (values ​​can be nil)

Now I'm trying to scan values ​​into a structure:

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

var usr User

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

But I get an error

redigo.Scan: cannot assign to dest 0: cannot convert from Redis bulk string to *string

Please tell me what I'm doing wrong?

4

2 回答 2

0

文档中它说这[]byte是批量字符串的类型,而不是*string. 您在这里有两个选择:

  1. 将特定字段类型更改为[]byte
  2. 或在扫描中使用临时变量[]byte类型,然后在检索到数据后将其存储到结构的字段中
于 2019-12-19T08:04:02.603 回答
0

扫描文档说:

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

应用程序将指向 a 的指针传递*string给函数。A*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)
于 2019-12-19T08:04:59.507 回答