Golang服务器“写tcp ...使用封闭网络连接”

时间:2016-05-01 12:43:23

标签: heroku go redis

我是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
}

任何人都可以指出我,我做错了什么?

0 个答案:

没有答案