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.Scan:无法从Redis批量字符串转换为*字符串_Go_Redis_Redigo - Fatal编程技术网

错误-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
    不是受支持的目标类型,而不是与批量字符串的表示不匹配。