2016-12-05 4 views
0

Mit redigo versuche ich HMGET zu verwenden. Ich übergebe ein String Slice als Param im Feld. Es funktioniert nicht und gibt ein leeres Ergebnis zurück.HMGET: Leeres Ergebnis beim Übergeben von Parametern

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 
} 

Dies wird

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

Irgendwelche Vorschläge, warum Feld, wenn sie als param bestanden nicht?

Antwort

1

Was Sie senden ist HMGET r.HashName [1 2 3]

Trennen Sie die Argumente oder ihnen die gleiche Scheibe hinzuzufügen und diese Scheibe als variadische Parameter zu erweitern. Da Sie Typ verwenden []string müssen Sie das zu einem []interface{} Typ konvertieren auch:

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

die Signatur 'senden ist (cmd string, args ... Schnittstelle {}) error'. Sie müssen also zuerst in ein Interface {} slice konvertieren. –

+0

@Not_a_Golfer: oops, sollte die Dokumente überprüft haben;) wird behoben. – JimB

+0

Jetzt im Ergebnis bekomme ich ["val1", "val2", "val3"], wie bekomme ich es in ["val: Paar"] Format? –

Verwandte Themen