Движок 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()
метод.