2016-12-05 4 views
0

redigoを使用して、HMGETを使用しようとしています。私はフィールドにparamとして文字列スライスを渡しています。それは動作していない、空の結果を返します。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 
} 

これはのparamとして渡されたフィールドが機能しない理由

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

任意の提案を働いていますか?

答えて

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文字列、引数...インタフェース{})ERROR'です。最初にinterface {}スライスに変換する必要があります。 –

+0

@Not_a_Golfer:oops、ドキュメントをダブルチェックする必要があります;)が修正されます。 – JimB

+0

結果が「val1」、「val2」、「val3」となっていますが、どうすれば「val:pair」形式で取得できますか? –

関連する問題