🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
当在中间件或 handler 中启动新的 Goroutine 时,**不能**使用原始的上下文,必须使用只读副本。 ```go 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") } ```