Lewati ke konten

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")
}