1. package main
    2. import (
    3. "github.com/gin-gonic/gin"
    4. "log"
    5. "time"
    6. )
    7. type Login struct{
    8. User string `form:"username" json:"username" xml:"username" uri:"username" binding:"required"`
    9. Password string `form:"password" json:"password" xml:"password" uri:"password" binding:"required"`
    10. }
    11. func main(){
    12. // 1、创建路由
    13. g := gin.Default()
    14. // 2、绑定路由规则
    15. g.GET("/sync",syncFunc)
    16. g.GET("/async",asyncFunc)
    17. g.Run(":8000")
    18. }
    19. func syncFunc(context *gin.Context){
    20. time.Sleep(time.Second*5)
    21. log.Println("同步操作...", context.Request.URL.Path)
    22. }
    23. func asyncFunc(context *gin.Context){
    24. copyC := context.Copy()
    25. go func(){
    26. time.Sleep(time.Second*5)
    27. log.Panicln("异步操作...", copyC.Request.URL.Path)
    28. }()
    29. }

    其中syncFunc是同步操作,asyncFunc是异步操作。

    注意:异步操作不能直接使用context,需要使用其副本

    同步操作的话需要等待5秒,才打印日志,如下:

    1. 2020/04/02 15:25:34 同步操作... /sync
    2. [GIN] 2020/04/02 - 15:25:34 |?[97;42m 200 ?[0m| 5.0308557s | 127.0.0.1 |?[97;44m GET ?[0m "/sync"

    异步操作如下:

    1. [GIN] 2020/04/02 - 15:27:59 |?[97;42m 200 ?[0m| 0s | 127.0.0.1 |?[97;44m GET ?[0m "/async"
    2. 2020/04/02 15:28:04 异步操作... /async