2

我正在尝试将多个元素推送到一个 redis 键。当前使用使用https://github.com/gomodule/redigo的 redis 池连接。

如果我尝试将一个数组放入 rpush ,则会推送一个连接数组的字符串。我怎样才能推送单个元素

conn := Pool.Get() // A redigo redis pool 
arr := []string{"a", "b", "c", "d"}
conn.Do("RPUSH","TEST","x","y") // This works
conn.Do("RPUSH", "TEST", arr) //This does not work
4

2 回答 2

2

我没有图书馆,但从我在他们的文档中看到的,我想这应该可行:

conn.Do("RPUSH", arr...)

...是一个参数运算符,它解包切片的元素并将它们作为单独的参数传递给可变参数函数,这与此相同:

arr := []string{"TEST", "a", "b", "c", "d"}

conn.Do("RPUSH", "TEST", arr[0], arr[1], arr[2], arr[3])

可以在这篇非常完整的文章中找到有关可变参数函数的更多信息

于 2018-08-11T17:01:02.860 回答
1

构建一个参数切片并使用这些参数调用可变参数函数:

 args := []interface{"TEST")
 for _, v := range arr {
   args = append(args, v)
 }
 conn.Do("RPUSH", args...)

Args助手用一行应用程序代码做同样的事情:

 conn.Do("RPUSH", edis.Args{}.Add("TEST").AddFlat(arr)...)
于 2018-08-12T00:37:18.303 回答