2016-12-19 72 views
0

我使用redigo redis庫,並檢查密鑰是否已存在於redis set中。我使用redis命令SISMEMBER,通過redirect的Do方法返回一個接口。這是使用Do執行的命令的響應。在SISMEMBER命令的情況下,響應在10。在這種情況下,響應是0,因爲給定密鑰不存在於該組中。但是reflect.DeepEqual(resp, 0)正在返回false,當預計爲true時。這是不是使用DeepEqual函數的正確方法?golang 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") 
    } 

} 

回答

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") 
} 
+0

謝謝,這個解決方案看起來很有前途。 – srini

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

當我做檢查resp接口的類型,我發現它是int64,所以鑄造0適當,像下面,有幫助。

reflect.DeepEqual(resp, int64(0))