gin同步和异步
package main
import (
"github.com/gin-gonic/gin"
"log"
"time"
)
type Login struct{
User string `form:"username" json:"username" xml:"username" uri:"username" binding:"required"`
Password string `form:"password" json:"password" xml:"password" uri:"password" binding:"required"`
}
func main(){
// 1、创建路由
g := gin.Default()
// 2、绑定路由规则
g.GET("/sync",syncFunc)
g.GET("/async",asyncFunc)
g.Run(":8000")
}
func syncFunc(context *gin.Context){
time.Sleep(time.Second*5)
log.Println("同步操作...", context.Request.URL.Path)
}
func asyncFunc(context *gin.Context){
copyC := context.Copy()
go func(){
time.Sleep(time.Second*5)
log.Panicln("异步操作...", copyC.Request.URL.Path)
}()
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
其中syncFunc
是同步操作,asyncFunc
是异步操作。
注意:异步操作不能直接使用 context,需要使用其副本
同步操作的话需要等待 5 秒,才打印日志,如下:
2020/04/02 15:25:34 同步操作... /sync
[GIN] 2020/04/02 - 15:25:34 |?[97;42m 200 ?[0m| 5.0308557s | 127.0.0.1 |?[97;44m GET ?[0m "/sync"
1
2
3
2
3
异步操作如下:
[GIN] 2020/04/02 - 15:27:59 |?[97;42m 200 ?[0m| 0s | 127.0.0.1 |?[97;44m GET ?[0m "/async"
2020/04/02 15:28:04 异步操作... /async
1
2
3
2
3
作者:
本文链接:https://jokerbai.com
版权声明:本博客所有文章除特别声明外,均采用 署名-非商业性-相同方式共享 4.0 国际 (CC-BY-NC-SA-4.0) 许可协议。转载请注明出处!
上次更新: 2025/07/19, 09:17:41
- 02
- 使用Zadig从0到1实现持续交付平台07-19
- 03
- 基于Jira的运维发布平台07-19