为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
尚方宝剑之说 2022-04-26 14:33:39
我有一个struct这样的type User struct {    Nickname  *string `json:"nickname"`    Phone     *string `json:"phone"`}HMSET值用命令放在redis中。(值可以为nil)现在我正在尝试将scan值转换为一个结构:values, err := redis.Values(Cache.Do("HMGET", "key", "nickname", "phone" )var usr User_, err := redis.Scan(values, &usr.Nickname, &usr.Phone)但我得到一个错误redigo.Scan:无法分配到 dest 0:无法从 Redis 批量字符串转换为 *string请告诉我我做错了什么?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

扫描文档说:


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)


查看完整回答
反对 回复 2022-04-26
?
桃花长相依

TA贡献1860条经验 获得超8个赞

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

  1. 将特定字段类型更改为[]byte

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


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 269 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信