服务器在返回语句后崩溃

时间:2021-01-17 23:22:33

标签: go

我有一个使用 net/http 包用 Go 编写的服务。

http.HandleFunc("/hello", Hello)
log.Fatal(http.ListenAndServe(":8080", nil))

到目前为止一切顺利。 在 func Hello 中,代码存根如下:

func Hello(w http.ResponseWriter, r *http.Request) {
    
    c, err := r.Cookie("token")
    if err != nil {
        if err == http.ErrNoCookie {
            // If the cookie is not set, return an unauthorized status
            w.WriteHeader(http.StatusUnauthorized)
            log.WithFields(log.Fields{
                "fnc": "Hello",
            }).Fatal(err)
            return
            //exit status 1 < Server stops here.
        }
        
        w.WriteHeader(http.StatusBadRequest)
        log.WithFields(log.Fields{
            "fnc": "Hello",
        }).Fatal(err)
        return
    }

问题是当代码流到达在请求 ErrNoCookie 中找不到 cookie 的地方时,程序/服务器存在于 return 语句之后,控制台显示 exit status 1,并且在客户端收到错误为 { {1}}

但是,作为一项服务,我希望它继续运行并响应后续请求。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

你称之为:

log.WithFields(log.Fields{
"fnc": "Hello",
}).Fatal(err)

就在回来之前。而 Fatal 实际上以代码 1 退出。 https://godoc.org/github.com/sirupsen/logrus#Fatal

尝试删除对 Fatal 的所有调用。