教程 > gin 教程 > 阅读:103

gin 在中间件中使用goroutine——迹忆客-ag捕鱼王app官网

当在中间件或 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()
}

以上代码执行结果如下

gin 在中间件中使用goroutine

查看笔记

扫码一下
查看教程更方便
网站地图