Движок Google App -Redislabs Go - ошибка производства во время выполнения - неверный адрес памяти или разыменование нулевого указателя

Я использую сервис Redis Cloud (от Redis Labs) в движке Google App Go Runtime, и я получаю вышеупомянутую ошибку, когда пытаюсь получить ключ, который не существует. Код отлично работает на локальном тестовом сервере, но в рабочем состоянии паникует.

 c, err := redis.Dial("tcp", "pub-redis-myredis:<myport>")
_, err = c.Do("AUTH", "password") 
value, err := c.Do("GET", "foo4")

if value == nil {
    log.Infof(contextOfAppEngineWhereServerIsRunning, "value not found in redislabs")

} 

Журнал показывает, что паника в линии _, err = c.Do("AUTH", "password")

1 ответ

Решение

В AppEngine ваше приложение (веб-приложение) работает в изолированной среде, где вы не можете использовать стандартную net пакет для сокетов (который я предполагаю использовать redislabs).

Вы должны использовать appengine/socket пакет для исходящих сетевых сокетов.

Скорее всего, это работает локально, потому что ограничение применяется только в производственной среде.

Всегда чек возвращается error ценности. В настоящее время в коде, который вы разместили, вы не отметили ни одного Если вы проверили это, вы увидите причину ошибки.

Ты получаешь invalid memory address or nil pointer dereference ошибка, потому что ваш первый вызов не удался:

c, err := redis.Dial("tcp", "pub-redis-myredis:<myport>")

err будет не nil значение и c является nil что означает, что вы не можете назвать это Do() метод.

Другие вопросы по тегам