gin原始碼學習-專案啟動(1)
阿新 • • 發佈:2022-12-07
目前公司後臺專案也在用golang的gin框架進行重構,從gin官方給出的效能對比資料來看,效能十分優秀,而且乾淨整潔,少量程式碼就可以起一個web專案,簡直不要太爽,目前github上的star數量已經65k(截至2022-12),十分亮眼。
已經有一定實踐經驗之後,這下來看看gin的具體實現,一來鞏固,二來學習優秀開源框架的一些思想。
後面的原始碼學習與gin的使用,初步計劃從這個方面入手:
- 專案啟動
- 路由與分組
- 引數繫結與校驗
- 中介軟體
- 日誌處理
- 與其他元件結合使用
專案啟動
1.專案quickstart
程式碼:
package main import ( "gin-any/api" // 專案內的handlerfunc "github.com/gin-gonic/gin" ) func main() { // 1.新建engine引擎 engine := gin.Default() // 2.註冊路由 engine.GET("/hello", func(ctx *gin.Context) { ctx.JSON(http.StatusOK, gin.H{ "msg": "hello gin!", }) }) engine.POST("/login", api.Login) // 註冊路由,同時加入中介軟體 engine.GET("/user", api.AuthJWTMiddleware(), api.User) // 3.啟動專案 engine.Run(":8080") }
我們看到gin專案的server僅需要簡單幾步,即可起來web server,接下來分別從程式碼中的3個步驟說明gin專案啟動。
首先了解幾個重要概念:
- engine:總的引擎,儲存各個元件資訊
- RouterGroup:路由組,儲存路由資訊
- engine.pool:sync.pool,複用context
- tree:radix tree或者認為是字典樹,儲存url與handler的對映關係
- context:請求與響應,用於request傳遞
1.gin.Default()
2.engine.Get() | engine.Post()等
3.engine.Run()
本文參考文件: