2017-07-24 69 views
0

我試圖使用mysql2redis將db數據加載到redis集羣。調用中的參數太多

當我嘗試接受的解決方案,即

} else if e.Command == "HMSET" { 
    // Build up a string slice to hold the key value pairs 
    args := make([]string, 0, len(e.MapData) * 2) 
    for k, v := range e.MapData { 
     args = append(args, k, v) 
    } 
    _,err := redis.StringMap(client.Do("HMSET", e.Key, args...)) 
    checkErr(err, "hmset error:") 
} 

我得到異常以下,

too many arguments in call to client.Do 
    have (string, string, []string...) 
    want (string, ...interface {}) 

我是一個新手,當來得快去得也快。那麼Go老兵們可以看看這個並提出解決方案嗎?

回答

0

在Go中,您可以使用切片作爲可變參數。但是,slice必須包含需要傳遞給函數的所有參數。您無法展開切片並傳遞其他參數。

因此你的代碼應該是這樣的:

args := make([]interface{}, 0, len(e.MapData) * 2 + 1) 
args = append(args, e.Key) 
for k, v := range e.MapData { 
    args = append(args, k, v) 
} 
_,err := redis.StringMap(client.Do("HMSET", args...))