我是Go的初学者,我曾编写过小型服务器来测试并在heroku平台上部署它。我有/退出请求,几乎可以工作,但有时我看到这样的事情:
PANIC: write tcp 172.17.110.94:36641->10.11.189.195:9951: use of closed network connection
我不知道为什么会发生这种情况,为什么有时它会完美无缺。 我的步骤:
我将第一个 POST 请求发送到 / token-auth ,然后生成令牌并发送为响应。
在第二天,我使用该令牌执行 / logout GET 请求,并将令牌设置为 Redis商店
以下是我的redil_cli.go
的完整代码 package store
import (
"github.com/garyburd/redigo/redis"
)
type RedisCli struct {
conn redis.Conn
}
var instanceRedisCli *RedisCli = nil
func Connect() (conn *RedisCli) {
if instanceRedisCli == nil {
instanceRedisCli = new(RedisCli)
var err error
//this is works!!!
instanceRedisCli.conn, err = redis.Dial("tcp", "lab.redistogo.com:9951")
if err != nil {
panic(err)
}
if _, err := instanceRedisCli.conn.Do("AUTH", "password"); err != nil {
//instanceRedisCli.conn.Close()
panic(err)
}
}
return instanceRedisCli
}
func (redisCli *RedisCli) SetValue(key, value string, expiration ...interface{}) error {
_, err := redisCli.conn.Do("SET", key, value)
if err == nil && expiration != nil {
redisCli.conn.Do("EXPIRE", key, expiration[0])
}
return err
}
func (redisCli *RedisCli) GetValue(key string) (interface{}, error) {
data, err := redisCli.conn.Do("GET", key)
if err != nil{
panic(err)
}
return data, err
}
之后,检查Authorization标头的函数在尝试执行GetValue(key string)
方法
func (redisCli *RedisCli) GetValue(key string) (interface{}, error) {
data, err := redisCli.conn.Do("GET", key)
if err != nil{
panic(err)
}
return data, err
}
任何人都可以指出我,我做错了什么?