1. 同步异步

  • goroutine机制可以方便地实现异步处理
  • 另外,在启动新的goroutine时,不应该使用原始上下文,必须使用它的只读副本
  1. package main
  2. import (
  3. "log"
  4. "time"
  5. "github.com/gin-gonic/gin"
  6. )
  7. func main() {
  8. // 1.创建路由
  9. // 默认使用了2个中间件Logger(), Recovery()
  10. r := gin.Default()
  11. // 1.异步
  12. r.GET("/long_async", func(c *gin.Context) {
  13. // 需要搞一个副本
  14. copyContext := c.Copy()
  15. // 异步处理
  16. go func() {
  17. time.Sleep(3 * time.Second)
  18. log.Println("异步执行:" + copyContext.Request.URL.Path)
  19. }()
  20. })
  21. // 2.同步
  22. r.GET("/long_sync", func(c *gin.Context) {
  23. time.Sleep(3 * time.Second)
  24. log.Println("同步执行:" + c.Request.URL.Path)
  25. })
  26. r.Run(":8000")
  27. }