golang deepEqual interface {}到整数

时间:2016-12-19 22:04:52

标签: go redis

我正在使用redigo redis库,并检查redis set中是否已存在密钥。我通过redigo的SISMEMBER方法使用redis命令Do,该方法返回一个接口。它是使用Do执行的命令的响应。如果是SISMEMBER命令,则10中的响应。在这种特殊情况下,响应为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")
    }

}

2 个答案:

答案 0 :(得分:1)

您可以使用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")
}

答案 1 :(得分:0)

fmt.Printf("ret type: %T, ret: %v\n", resp, resp)

当我检查resp界面的类型时,我发现它是int64,因此适当地投射0,如下所示,有帮助。

reflect.DeepEqual(resp, int64(0))