Membuat Global Error Handler Go-Lang, Gin Fremework

By Rizky Kurniawan - June 8, 2023 ~3 mins read

Halo Talenta Digital! Pada postingan kali ini, kita akan membahas tentang cara membuat global error handler di framework Gin. Global error handler sangat penting dalam pengembangan aplikasi karena memungkinkan kita untuk menangani kesalahan secara konsisten di seluruh aplikasi.

Dalam pengembangan aplikasi web, error handling (penanganan kesalahan) adalah aspek penting yang perlu diperhatikan. Golang merupakan bahasa pemrograman yang tangguh, dan framework Gin memberikan kemudahan dalam membangun aplikasi web. Dalam artikel ini, kita akan belajar cara membuat global error handler di Golang menggunakan Gin, sehingga kita dapat mengelola dan menangani kesalahan secara efisien.

Langkah 1: Persiapan Sebelum memulai, pastikan Kita telah menginstal Golang dan mengimpor framework Gin dengan menggunakan perintah berikut ini:

go get -u github.com/gin-gonic/gin

Langkah 2: Membuat Custom Error Pertama, mari kita buat struktur data untuk custom error kita. Buatlah file baru dengan nama errors.go dan tambahkan kode berikut:

package main

import "fmt"

type CustomError struct {
	Code    int    `json:"code"`
	Message string `json:"message"`
}

func (ce *CustomError) Error() string {
	return fmt.Sprintf("Error %d: %s", ce.Code, ce.Message)
}

func NewCustomError(code int, message string) *CustomError {
	return &CustomError{
		Code:    code,
		Message: message,
	}
}

Kode di atas mendefinisikan struktur CustomError dengan dua properti, yaitu Code dan Message. Kita juga mendefinisikan metode Error() untuk mengimplementasikan interface error, dan fungsi NewCustomError() untuk membuat instance baru dari CustomError.

Langkah 3: Membuat Global Error Handler Selanjutnya, mari kita buat fungsi global error handler untuk menangani semua kesalahan yang muncul di dalam aplikasi kita. Buatlah file baru dengan nama middleware.go dan tambahkan kode berikut:

package main

import (
	"fmt"

	"github.com/gin-gonic/gin"
)

func GlobalErrorHandler() gin.HandlerFunc {
	return func(c *gin.Context) {
		c.Next()

		// Tangkap error yang muncul di middleware atau handler
		err := c.Errors.Last()
		if err != nil {
			// Tangani error di sini
			switch e := err.Err.(type) {
			case *CustomError:
				// Tangani custom error
				c.JSON(e.Code, gin.H{
					"error": e.Message,
				})
			default:
				// Tangani error lainnya
				c.JSON(500, gin.H{
					"error": err.Error(),
				})
			}

			// Hentikan eksekusi konteks
			c.Abort()
		}
	}
}

Kode di atas menggunakan c.Error yang merupakan bagian dari Gin untuk mengakses error terakhir yang terjadi dalam konteks. Jika ada error, kita mengirimkan respons JSON dengan kode status 500 dan menghentikan eksekusi konteks dengan menggunakan c.Abort().

Langkah 4: Menerapkan Global Error Handler pada Aplikasi

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	r.Use(GlobalErrorHandler())

	r.GET("/ping", func(c *gin.Context) {
		// Buat contoh error
		err := NewCustomError(500, "Internal Server Error")
		c.Error(err) // Menyimpan error ke dalam konteks
	})

	r.Run(":8080")
}

Kode di atas menggunakan c.Error untuk menyimpan error ke dalam konteks Gin. Ketika kita membuat contoh error err menggunakan NewCustomError, kita kemudian menyimpannya ke dalam konteks menggunakan c.Error(err).

Dengan menggunakan c.Error, kita dapat mengakses error yang terjadi di middleware atau handler dan mengirimkan respons JSON yang sesuai dengan kesalahan yang terjadi.

Bagikan:

Ingin Berdiskusi?

Yuk bergabung di Grup Telegram Ruang Developer atau mulai diskusi melalui GitHub. See You!

Dapatkan contoh source code project backend, frontend, atau fullstack untuk kamu amati, tiru, dan modifikasi sesuka hati. Klik untuk melihat detail!
comments powered by Disqus

Berlangganan Gratis

Kamu akan menerima email update dari Ruang Developer

Beri Dukungan

Beri dukungan, dapatkan full source code project web untuk bahan referensi, tiru, dan modifikasi.
Lightbox