2016-12-05 137 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]]格式? –