go实战:web框架gin的使用(十九):Goroutine使用

本文介绍在Gin框架中如何正确地在Goroutine内使用上下文的副本,避免因直接使用原始上下文而导致的问题。通过示例代码展示了在同步与异步处理中上下文使用的方法。

以下内容转载自 https://blog.youkuaiyun.com/stronglyh/article/details/80557825

当在中间件或处理程序中启动新的GORDUTIN时,不应该在其内部使用原始上下文,必须使用只读副本。

 

 

func main() {
	r := gin.Default()
 
	r.GET("/long_async", func(c *gin.Context) {
		// 创建要在goroutine中使用的副本
		cCp := c.Copy()
		go func() {
			// simulate a long task with time.Sleep(). 5 seconds
			time.Sleep(5 * time.Second)
 
			// 这里使用你创建的副本
			log.Println("Done! in path " + cCp.Request.URL.Path)
		}()
	})
 
	r.GET("/long_sync", func(c *gin.Context) {
		// simulate a long task with time.Sleep(). 5 seconds
		time.Sleep(5 * time.Second)
 
		// 这里没有使用goroutine,所以不用使用副本
		log.Println("Done! in path " + c.Request.URL.Path)
	})
 
	// Listen and serve on 0.0.0.0:8080
	r.Run(":8080")
}

 

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值