Gin 在中间件中使用Goroutine

当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本。

package main

import (
	"github.com/gin-gonic/gin"
	"log"
	"time"
)

func main() {
	r := gin.Default()

	r.GET("/test1", func(c *gin.Context) {
		// 拷贝一份副本在Goroutine中使用
		tmp := c.Copy()
		go func() {
			time.Sleep(5 * time.Second)
			// 这里使用的是值拷贝的tmp
			log.Println("test1已完成,路径是:" + tmp.Request.URL.Path)
		}()
	})

	r.GET("/test2", func(c *gin.Context) {
		time.Sleep(5 * time.Second)
		// 因为没有使用 goroutine,不需要拷贝上下文
		log.Println("test2已完成,路径是:" + c.Request.URL.Path)
	})
	r.Run()
}

以上代码执行结果如下

动画

作者:admin,如若转载,请注明出处:https://www.web176.com/gin-3/24742.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023年7月25日
下一篇 2023年7月25日

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注


Fatal error: Uncaught JSMin_UnterminatedStringException: JSMin: Unterminated String at byte 525: ", in /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php:214 Stack trace: #0 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(152): JSMin->action() #1 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php(86): JSMin->min() #2 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(257): JSMin::minify() #3 [internal function]: AO_Minify_HTML->_removeScriptCB() #4 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(108): preg_replace_callback() #5 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/ao-minify-html.php(47): AO_Minify_HTML->process() #6 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/autoptimizeHTML.php(105): AO_Minify_HTML::minify() #7 /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/aut in /www/wwwroot/web176.cc/wp-content/plugins/autoptimize/classes/external/php/jsmin.php on line 214