Study
Echo

Context & Data Sharing Antar Middleware

Penjelasan

c.Set("key", value) menyimpan data custom di echo.Context selama SATU request berjalan — berguna untuk meneruskan data dari middleware ke handler berikutnya (mis. data user yang sudah login dari middleware autentikasi). Dibaca kembali lewat c.Get("key"), TIPE hasilnya interface{} sehingga perlu type assertion.

Contoh Konsep

func AuthMiddleware(next echo.HandlerFunc) echo.HandlerFunc {
	return func(c echo.Context) error {
		user := "Budi" // anggap sudah diverifikasi dari token
		c.Set("user", user)
		return next(c)
	}
}

e.GET("/profil", func(c echo.Context) error {
	user := c.Get("user").(string) // type assertion, karena Get() mengembalikan interface{}
	return c.String(http.StatusOK, fmt.Sprintf("Halo, %s!", user))
}, AuthMiddleware)

Praktikum

Buat middleware yang men-c.Set("requestId", suatu string unik). Buat handler yang membaca kembali lewat c.Get("requestId").(string) dan menampilkannya di response.

Editor Latihan

Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.

Tips

Type assertion c.Get("key").(TipeAsli) akan PANIC kalau tipe datanya tidak cocok atau key-nya tidak pernah di-Set() — untuk kode production yang lebih aman, pakai bentuk dua-nilai user, ok := c.Get("user").(string) yang mengembalikan ok bertipe bool tanpa panic kalau gagal.