Pengertian Panic Handler
Ketika kita membuat logic pada handler pasti kita memikirkan suatu kasus ketika terjadi panic, lalu apa yang harus kita lakukan? Dalam Panic handler ini secara otomatis akan terjadi error dan web akan berhenti mengembalikan response. Pada materi sebelumnya kita pernah membahas tentang Web menanangi panic dengan membuat Middleware khusus secara manual. Namun di Router sudah disediakan untuk menangani panic
dengan cara menggunakan attribute PanicHandler
.
func(http.ResponseWriter, *http.Request, interface{})
Cara Implementasi
Saat melakukan implementasi Panic Handler
kita perlu buat router PanicHandler
seperti dibawah ini pada file main.go
.
router.PanicHandler = func(w http.ResponseWriter, r *http.Request, i interface{}) {
fmt.Fprint(w, "Panic ", i)
}
Selanjutnya kita akan membuat suatu handler yang isinya langsung arahkan pada situasi panic
dengan menggunaan fungsi panic()
seperti dibawah ini.
func PanicHandler(w http.ResponseWriter, r *http.Request, p httprouter.Params) {
panic("Oops panic")
}
Setelah itu kita tambahkan juga pada file main.go
inisialisasi Router agar handler yang sudah kita buat diatas terbaca oleh router dan nantinya kita akan coba akses endpoint tersebut sebagai simulasi.
router.GET("/panic", PanicHandler)
Jika sudah menambahkan yang diatas maka kita tinggal coba untuk menjalankan program atau project kita dengan perintah ini.
go build && ./learn-golang-httprouter
lanjut kita coba akses endpoint yang sudah kita buat dengan menggunakan cURL dibawah ini dan hasilnya pun akan keluar sesuai dengan definisi panic yang sudah kita buath
➜ santekno-hugo git:(main) ✗ curl --location --request GET 'http://localhost:8080/panic'
Panic Oops panic%
Jika kita membuat handler panic seperti diatas ini maka service atau project kita tidak akan berhenti karena panic handler yang sudah kita buat ini tidak akan menyebabkan program menjadi berhenti. Maka ini sangat memberikan manfaat jika kita memiliki banyak endpoint dalam satu project lalu ada salah satu endpoint yang menjadi panic maka service tidak akan mati dan juga tidak akan mengganggu endpoint yang lain dikarenakan service atau program kita tetap jalan seperti biasanya.