Goroutine dalam middleware
Saat memulai Goroutine baru di dalam sebuah middleware atau handler, Anda TIDAK BOLEH menggunakan context asli di dalamnya, Anda harus menggunakan salinan hanya-baca.
func main() { router := gin.Default()
router.GET("/long_async", func(c *gin.Context) { // buat salinan untuk digunakan di dalam goroutine cCp := c.Copy() go func() { // simulasikan tugas yang panjang dengan time.Sleep(). 5 detik time.Sleep(5 * time.Second)
// perhatikan bahwa Anda menggunakan konteks yang disalin "cCp", INI PENTING log.Println("Done! in path " + cCp.Request.URL.Path) }() })
router.GET("/long_sync", func(c *gin.Context) { // simulasikan tugas yang panjang dengan time.Sleep(). 5 detik time.Sleep(5 * time.Second)
// selama kita TIDAK menggunakan goroutine, kita tidak perlu menyalin context log.Println("Done! in path " + c.Request.URL.Path) })
// Jalankan server pada 0.0.0.0:8080 router.Run(":8080")}