gin从入门到放弃

中间件

2019-10-17  本文已影响0人  寒云暮雨

1、不使用默认的中间件

/*
@Author :   寒云
@Email  :   1355081829@qq.com
@Time : 2019/10/15 11:51
*/
package main

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

func main() {
    r := gin.New()
    r.Use(gin.Logger())
    _ = r.Run(":8089")
}

不使用默认的中间件

    r := gin.New()

添加一个中间件


    r.Use(gin.Logger())

2、使用默认的中间件
···
// Default 使用 Logger 和 Recovery 中间件
r := gin.Default()
···

3、在中间件中使用 Goroutine

/*
@Author :   寒云
@Email  :   1355081829@qq.com
@Time : 2019/10/15 11:51
*/
package main

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

func main() {
    r := gin.New()
    r.Use(gin.Logger())
    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)
        }()
        c.JSON(http.StatusOK, gin.H{"name": "hanyun"})
    })

    _ = r.Run(":8089")
}


我们访问http://127.0.0.1:8089/long_async之后结果立马返回,我们打印的日志等待5秒后输出
敲黑板,下面一定要记着,在携程里使用中间件 一定 cCp := c.Copy() ,如下示例

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

上一篇下一篇

猜你喜欢

热点阅读