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.


Ara katman


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)}