我在运行时使用Redis服务(来自Redis实验室),当我尝试获取一个不存在的键时,我会得到上面提到的错误。该代码在本地测试服务器上运行良好,但在生产中却很恐慌。
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")中。
发布于 2015-04-24 13:10:53
在AppEngine上,您的应用程序(webapp)运行在沙箱环境中,您不能为套接字使用标准的net包(我假设redislab使用这个包)。
您必须将appengine/socket包用于出站网络套接字。
它很可能在本地工作,因为限制只适用于生产环境。
始终检查返回的error值。当前,在您发布的代码中,您不检查任何代码。如果您已经检查了它,您将从错误中看到原因。
您得到invalid memory address or nil pointer dereference错误,因为您的第一次调用失败:
c, err := redis.Dial("tcp", "pub-redis-myredis:<myport>")err是一个非nil值,c是nil,这意味着您不能调用它的Do()方法。
https://stackoverflow.com/questions/29846815
复制相似问题