Rotinas de Go dentro dum Intermediário
Quando começares novas rotinas de Go dentro dum intermediário ou manipulador, NÃO DEVERIAS usar o contexto original dentro dele, tens que usar uma cópia de apenas leitura.
func main() { router := gin.Default()
router.GET("/long_async", func(c *gin.Context) { // criar cópia a ser usada dentro da rotina de go cCp := c.Copy() go func() { // simular uma tarefa longa com time.Sleep(). 5 segundos time.Sleep(5 * time.Second)
// nota que estás a usar o contexto copiado "cCp", IMPORTANTE log.Println("Done! in path " + cCp.Request.URL.Path) }() })
router.GET("/long_sync", func(c *gin.Context) { // simular uma tarefa longa com time.Sleep(). 5 segundos time.Sleep(5 * time.Second)
// já que não estamos a usar uma rotina de Go, não temos que copiar o contexto log.Println("Done! in path " + c.Request.URL.Path) })
// ouvir e servir na porta 0.0.0.0:8080 router.Run(":8080")}