Herkese merhaba!

Uzun yıllardır bol miktarda kişisel zaman ve enerji harcayarak bilgimizi hepinizle paylaşıyoruz. Ancak şu andan itibaren bu blogu çalışır durumda tutabilmek için yardımınıza ihtiyacımız var. Yapmanız gereken tek şey, sitedeki reklamlardan birine tıklamak olacaktır, aksi takdirde hosting vb. masraflar nedeniyle maalesef yayından kaldırılacaktır. Teşekkürler.

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