我正在使用redigo
redis库,并检查redis set
中是否已经存在密钥。我通过redigo的SISMEMBER
方法使用redis命令Do
,该方法返回一个接口。它是使用Do
执行命令的响应。如果是SISMEMBER
命令,则响应为1
或0
。在此特定情况下,响应为0
,因为此集合中不存在给定密钥。但是,当期望使用reflect.DeepEqual(resp, 0)
时,false
返回true
。这不是使用DeepEqual
函数的正确方法吗?
import (
"fmt"
"reflect"
"github.com/garyburd/redigo/redis"
)
func main() {
conn, err := redis.Dial("tcp", "127.0.0.1:6379")
if err != nil {
fmt.Println(err.Error())
return
}
defer conn.Close()
resp, err := conn.Do("SISMEMBER", "mySet", "Hello")
if reflect.DeepEqual(resp, 0) {
fmt.Println("record doesn't exist")
}
}
最佳答案
您可以使用redigo的一些内置函数将响应转换为int
,然后检查键是否在redis中,而不是使代码过于复杂。
resp, err := redis.Int(conn.Do("SISMEMBER", "mySet", "Hello"))
if err != nil {
// some error handler
}
if resp == 0 {
fmt.Println("record doesn't exist")
}
关于go - 将golang deepEqual接口(interface){}转换为整数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41231767/