go - HMGET : Empty result when passing params

标签 go redis redigo

使用 redigo,我正在尝试使用 HMGET。我在字段中传递一个字符串 slice 作为参数。它不起作用,返回空结果。

func HMGET(c redis.Conn, field []string)(){
        if err := c.Send("HMGET", HashName, field); err != nil {
            return nil, err
        }
        if err := c.Flush(); err != nil {
            return nil, err
        }
        rval, err := c.Receive()
        if err != nil {
            return nil, err
        }
        return rval, nil
}

这是有效的

c.Send("HMGET", r.HashName, "1", "2", "3")

对于为什么作为参数传递时字段不起作用的任何建议?

最佳答案

您发送的是 HMGET r.HashName [1 2 3]

将参数分开或将它们添加到同一 slice 并将该 slice 扩展为可变参数。由于您使用的是 []string 类型,您还需要将其转换为 []interface{} 类型:

func HMGET(c redis.Conn, field []string) {
    args := make([]interface{}, len(field)+1)
    args[0] = HashName
    for i, v := range field {
        args[i+1] = v
    }

    if err := c.Send("HMGET", args...); err != nil {
        return nil, err
    }
    //////

关于go - HMGET : Empty result when passing params,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40975589/

相关文章:

sql - 如何删除gorm包的Create方法中的RETURNING子句?

javascript - 无法在 Windows 10 x64 上安装 hiredis@0.5.0

go - 从 Redis 获取结构数组时解码错误

mysql - 在 MongoDB 中存储点击数据

c# - Redis 与应用内缓存

go - 如何在 Golang 中为 Redis(redigo) Pubsub 编写更好的 Receive()?

go - redigo 不同的池连接到单个服务器

templates - html/template if 范围索引子句

go - 如何在 VS Code 中指定二进制文件的输出路径?

file - 是否有一种独立于操作系统的方式来自动覆盖文件?