我有一个使用 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}}
但是,作为一项服务,我希望它继续运行并响应后续请求。
我做错了什么?
答案 0 :(得分:1)
你称之为:
log.WithFields(log.Fields{
"fnc": "Hello",
}).Fatal(err)
就在回来之前。而 Fatal
实际上以代码 1 退出。
https://godoc.org/github.com/sirupsen/logrus#Fatal
尝试删除对 Fatal
的所有调用。