23/12/2019 - GO
Panikten kurtulmak ve HTTP sunucunuzun sunum isteklerini sürdürmesine izin vermek için aşağıdaki örneği kullanabilirsiniz, aksi takdirde sunucu çökecektir. Herhangi bir panic
bir tür sistem hatası olduğundan, bu durumda 500
yanıtı döndüreceğiz.
Sisteminizdeki adreslerden birinde bilerek panik oluşturursanız ve çağırırsanız, yanıtın 500 Internal Server Error
olacağını görürsünüz.
package pkg
import (
"net/http"
)
func PanicRecovery(handler http.Handler) http.Handler {
return http.HandlerFunc(func(rw http.ResponseWriter, rq *http.Request) {
defer func() {
if err := recover(); err != nil {
log.Error(err)
// To avoid 'superfluous response.WriteHeader call' error
if rw.Header().Get("Content-Type") == "" {
rw.WriteHeader(http.StatusInternalServerError)
}
}
}()
handler.ServeHTTP(rw, rq)
})
}
return &http.Server{Addr: ":8080", Handler: pkg.PanicRecovery(yourRouter)}