pemrograman

05 Mempelajari Panic Handler

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.

comments powered by Disqus