2016-12-19 3 views
0

Я использую библиотеку redis redigo и проверяю, присутствует ли ключ в redis set. Я использую команду redis SISMEMBER с помощью метода redigo Do, который возвращает интерфейс. Это ответ команды, выполняемой с использованием Do. В случае команды SISMEMBER ответ в 1 или 0. и в этом конкретном случае ответ 0, поскольку данный ключ отсутствует в этом наборе. однако reflect.DeepEqual(resp, 0) возвращает false, когда ожидается true. Это не правильный способ использования функции DeepEqual?golang deepEqual interface {} to integer

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))