golang gin框架的gorountine使用
生活随笔
收集整理的這篇文章主要介紹了
golang gin框架的gorountine使用
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一 request
gin框架的每一個request請求都會開一個goroutine來處理,所以天然支持高并發
二 handle
func main() {
r := gin.Default()
r.GET("/long_async", func(c *gin.Context) {
// 創建要在goroutine中使用的副本
cCp := c.Copy()
go func() {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
// 這里使用你創建的副本
log.Println("Done! in path " + cCp.Request.URL.Path)
}()
})
r.GET("/long_sync", func(c *gin.Context) {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
// 這里沒有使用goroutine,所以不用使用副本
log.Println("Done! in path " + c.Request.URL.Path)
})
// Listen and serve on 0.0.0.0:8080
r.Run(":8080")
}
瀏覽器分別訪問http://localhost:8080/long_synchttp://localhost:8080/long_async 會發現async會立馬拋出返回,而sync則是同步等待到任務結束
三 sync.WaitGroup
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"log"
"sync"
"time"
)
func main() {
r := gin.Default()
a := 1
r.GET("/long_async", func(c *gin.Context) {
var wg sync.WaitGroup
// 創建要在goroutine中使用的副本
cCp := c.Copy()
wg.Add(1)
go func() {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
// 這里使用你創建的副本
log.Println("Done! in path " + cCp.Request.URL.Path)
wg.Done()
}()
wg.Add(1)
go func() {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
// 這里使用你創建的副本
log.Println("Done2! in path " + cCp.Request.URL.Path)
wg.Done()
}()
wg.Add(1)
go func() {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(2 * time.Second)
log.Println("a1", a )
a = 2
log.Println("a11", a )
// 這里使用你創建的副本
log.Println("Done3! in path " )
wg.Done()
}()
wg.Add(1)
go func() {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
log.Println("a2", a )
// 這里使用你創建的副本
log.Println("Done2! in path " + c.Request.URL.Path)
wg.Done()
}()
wg.Wait()
fmt.Println("request done")
})
r.GET("/long_sync", func(c *gin.Context) {
// simulate a long task with time.Sleep(). 5 seconds
time.Sleep(5 * time.Second)
// 這里沒有使用goroutine,所以不用使用副本
log.Println("Done! in path " + c.Request.URL.Path)
})
// Listen and serve on 0.0.0.0:8080
r.Run(":8080")
}
總結
以上是生活随笔為你收集整理的golang gin框架的gorountine使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 对html2canvas的研究
- 下一篇: python面向对象三大特性、类的约束、