教程 > Gin 教程 > Gin 基础 阅读:73

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()
}

以上代码执行结果如下

Gin 在中间件中使用Goroutine

查看笔记

扫码一下
查看教程更方便