1. 程式人生 > 其它 >gin原始碼學習-專案啟動(1)

gin原始碼學習-專案啟動(1)

目前公司後臺專案也在用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()

本文參考文件: