1

我正在尝试向我的网络应用程序添加一个用于错误处理的功能,而不是一直这样做

if err != nil {
   http.Error(w, "Internal Server Error", 500)
   return
}

做这样的事情:

ErrorHandler(err)

我做了这个功能:

func ErrorHandler(w *http.ResponseWriter, err error) {
    if err != nil {
        http.Error(*w, "Internal Server Error", 500)
        // break the go routine
    }
}

但我不知道发生错误时如何破坏处理程序

4

1 回答 1

0

发生错误时不能中断处理程序。有很多方法可以干净地做到这一点,但第一个选项(使用http.Error)也很好。

一种选择是将处理程序编写为:

func Handler(w http.ResponseWriter, req *http.Request) {
    err:=func() {
       // Do stuff
       if err!=nil {
         return err
       }
    }()
    if err!=nil {
       http.Error(w, "Internal Server Error", 500)
    }
}

另一种选择是使用类似中间件的模式:

func CheckError(hnd func(http.ResponseWriter,*http.Request) error) func(http.ResponseWriter,*http.Request) {
   return func(w http.ResponseWriter, req *http.Request) {
      err:=hnd(w,req)
      if err!=nil {
         // Deal with the error here
      }
    }
}

然后您可以将其用作处理程序:

CheckError(handler)

在哪里

func handler(w http.ResponseWriter, req *http.Request) error {
}
于 2021-06-18T19:40:15.647 回答