在中间件中使用 Goroutine
当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本。
func main() {
    r := gin.Default()
    r.GET("/long_async", func(c *gin.Context) {
        // 创建在 goroutine 中使用的副本
        cCp := c.Copy()
        go func() {
            // 用 time.Sleep() 模拟一个长任务。
            time.Sleep(5 * time.Second)
            // 请注意您使用的是复制的上下文 "cCp",这一点很重要
            log.Println("Done! in path " + cCp.Request.URL.Path)
        }()
    })
    r.GET("/long_sync", func(c *gin.Context) {
        // 用 time.Sleep() 模拟一个长任务。
        time.Sleep(5 * time.Second)
        // 因为没有使用 goroutine,不需要拷贝上下文
        log.Println("Done! in path " + c.Request.URL.Path)
    })
    // 监听并在 0.0.0.0:8080 上启动服务
    r.Run(":8080")
} 
           Gin 框架中文文档
Gin 框架中文文档 
           
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: