如何避免在失败情况下重复返回 InternalServerError?
How can I avoid the repetition of returning InternalServerError in failure cases?
我正在尝试向我的网络应用程序添加错误处理功能,而不是一直这样做
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
}
}
但我不知道发生错误时如何中断处理程序
发生错误时不能中断处理程序。有很多方法可以干净地做到这一点,但第一个选项(使用 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 {
}
我正在尝试向我的网络应用程序添加错误处理功能,而不是一直这样做
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
}
}
但我不知道发生错误时如何中断处理程序
发生错误时不能中断处理程序。有很多方法可以干净地做到这一点,但第一个选项(使用 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 {
}