2016-12-05 49 views
0

使用redigo时,我试图使用HMGET。我在字段中传递一个字符串片作为参数。它不工作,返回空结果。HMGET:传递参数时为空结果

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") 

任何建议,为什么现场时,如PARAM通过不工作?

回答

1

什么你发送的HMGET r.HashName [1 2 3]

单独的参数或将其添加同一切片,扩大该片作为一个可变参数。由于您使用的类型[]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 
    } 
    ////// 
+0

签名是'发(CMD字符串,ARGS ...接口{})error'。所以您需要首先转换为接口{}切片。 –

+0

@Not_a_Golfer:oops,应该重新检查文档;)会修复。 – JimB

+0

现在我得到[“val1”,“val2”,“val3”],我如何得到它[[val:pair]]格式? –