错误-redigo.Scan:无法从Redis批量字符串转换为*字符串
我有一个这样的错误-redigo.Scan:无法从Redis批量字符串转换为*字符串,go,redis,redigo,Go,Redis,Redigo,我有一个这样的struct type User struct { Nickname *string `json:"nickname"` Phone *string `json:"phone"` } 价值观使用HMSET命令将其放置在redis中。(价值观可以为零) 现在我正在尝试扫描值进入一个结构: values, err := redis.Values(Cache.Do("HMGET", "key", "nickname", "phone" ) var
struct
type User struct {
Nickname *string `json:"nickname"`
Phone *string `json:"phone"`
}
价值观使用HMSET
命令将其放置在redis中。(价值观可以为零)
现在我正在尝试扫描值进入一个结构:
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批量转换
字符串到*字符串
请告诉我我做错了什么?从中可以看出,[]字节
是大容量字符串的类型,而不是*字符串
。这里有两个选项:
将特定字段类型更改为[]字节
或者在扫描中使用带有[]字节的临时变量,然后在检索到数据后将其存储到结构的字段中
报告说:
dest指向的值必须是整数、浮点、布尔、字符串、[]字节、接口{}或这些类型的片
应用程序将指向*字符串的指针传递给函数。*字符串
不是受支持的类型之一
有两种解决问题的方法。第一种方法是分配string
值,并向分配的string
值传递指针以进行扫描:
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)
扫描
的主要目的是将批量字符串(表示为[]字节
)转换为其他Go类型,包括字符串
。问题在于*string
不是受支持的目标类型,而不是与批量字符串的表示不匹配。