ミドルウェア内の Goroutine
新しい goroutine をミドルウェアやハンドラー内で生成する場合、goroutine の内部でオリジナルの context を 使用しないでください。読み込み用のコピーを使ってください。
func main() {
r := gin.Default()
r.GET("/long_async", func(c *gin.Context) {
// goroutine 内で使用するコピーを生成します
cCp := c.Copy()
go func() {
// time.Sleep() を使って、長時間かかる処理をシミュレートします。5秒です。
time.Sleep(5 * time.Second)
// コピーされた context である "cCp" を使ってください。重要!
log.Println("Done! in path " + cCp.Request.URL.Path)
}()
})
r.GET("/long_sync", func(c *gin.Context) {
// time.Sleep() を使って、長時間かかる処理をシミュレートします。5秒です。
time.Sleep(5 * time.Second)
// goroutine を使ってなければ、context をコピーする必要はありません。
log.Println("Done! in path " + c.Request.URL.Path)
})
// 0.0.0.0:8080 でサーバーを立てます。
r.Run(":8080")
}