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