[Gin] 路由分組 Group 的內部實現 與 塊空間 { } 的應用


 

通過這篇 [Gin] 單文件極簡 HTTP Server 流程分析 ( gin-gonic/gin ) 

我們知道了 gin.go 中的 Engine 繼承有 routergroup.go 中的 RouterGroup 結構,從而獲得其所有方法。

 

RouterGroup 結構有一個方法 Group 是處理分組的,返回新的路由分組實例,分組的目的可以是出於路徑歸類 或者 為了使用相同的中間件。

// routergroup.go

//
Group creates a new router group. You should add all the routes that have common middlewares or the same path prefix. // For example, all the routes that use a common middleware for authorization could be grouped. func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup { return &RouterGroup{ Handlers: group.combineHandlers(handlers), basePath: group.calculateAbsolutePath(relativePath), engine: group.engine, } } // BasePath returns the base path of router group. // For example, if v := router.Group("/rest/n/v1/api"), v.BasePath() is "/rest/n/v1/api". func (group *RouterGroup) BasePath() string { return group.basePath } func (group *RouterGroup) handle(httpMethod, relativePath string, handlers HandlersChain) IRoutes { absolutePath := group.calculateAbsolutePath(relativePath) handlers = group.combineHandlers(handlers) group.engine.addRoute(httpMethod, absolutePath, handlers) return group.returnObj() }

 

應用:

// example.go

func main() {
    router := gin.Default()

    // Simple group: v1
    v1 := router.Group("/v1")
{ v1.POST(
"/login", loginEndpoint) v1.POST("/submit", submitEndpoint) v1.POST("/read", readEndpoint) } // Simple group: v2 v2 := router.Group("/v2")
{ v2.POST(
"/login", loginEndpoint) v2.POST("/submit", submitEndpoint) v2.POST("/read", readEndpoint) } router.Run(":8080") }

Group 只是一個函數,上面花括號是代表中間的語句屬於一個空間內,不受外界干擾,C語言中也有塊空間的語法。

 

Link:https://www.cnblogs.com/farwish/p/12707649.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM