Golang使用Gin框架實現(xiàn)路由分類處理請求流程詳解
在前面已經(jīng)學習了gin框架如何處理請求,解析請求,返回數(shù)據(jù)。
在實際的項目當中,項目往往是以模塊化來進行劃分和開發(fā)的,所謂的模塊化就是按照功能來劃分,比如會有產(chǎn)品模塊,會有用戶模塊,會將用戶相關(guān)的進行統(tǒng)一的開發(fā),放到用戶模塊當中,和產(chǎn)品相關(guān)的放在產(chǎn)品相關(guān)的模塊當中,這樣即方便開發(fā)者進行統(tǒng)一的開發(fā)也方便在系統(tǒng)的維護過程當中方便維護。
背景
在實際的項目開發(fā)中,均是模塊化開發(fā)。同一模塊內(nèi)的功能接口,往往會有相同的接口前綴。比如如下所示:
例如在系統(tǒng)中有用戶模塊,用戶有不同注冊、登錄、用戶信息
比如注冊是register接口,它屬于是用戶模塊,因此會在register前面有一個字段,這個字段表示的是用戶模塊是user模塊,第二級的url register才表示用戶模塊下注冊的功能。
第一級是用戶的模塊,第二級代表該模塊下面的什么功能。刪除是刪除用戶的id。
- 注冊:http://Localhost:9000/user/register
- 登錄:http://localhost:9000/user/login
- 用戶信息:http://localhost:9000/user/info
- 刪除: http://localhost:9080/user/1001
類似這種接口前綴統(tǒng)一,均屬于相同模塊的功能接口??梢允褂寐酚山M進行分類處理。
可以看到不同的接口是按照兩級的分類來定義的。
類似這種接口前綴統(tǒng)一,均屬于相同模塊的功能接口??梢允褂寐酚山M進行分類處理。
Group
所謂的路由組就是這些接口的前綴第一級都是以user開頭,表示都是屬于同一個模塊,既然都是屬于同一個模塊,那么能不能對其進行統(tǒng)一的處理呢?當然可以,可以使用group進行劃分,就是路由組。
group方法默認有兩個參數(shù),第一個參數(shù)是分組的url是分組的第一級,也就是模塊名稱。第二個參數(shù)是可變類型的參數(shù),這里可以不需要填。
func (group *RouterGroup) Group(relativePath string, handlers ...HandlerFunc) *RouterGroup
這里返回的是結(jié)構(gòu)體指針類型*RouterGroup,這個結(jié)構(gòu)體類型其實就是路由組的意思。在這個路由組當中,實現(xiàn)了很多的方法,這些方法都是這個接口里面的。
type IRoutes interface { Use(...HandlerFunc) IRoutes Handle(string, string, ...HandlerFunc) IRoutes Any(string, ...HandlerFunc) IRoutes GET(string, ...HandlerFunc) IRoutes POST(string, ...HandlerFunc) IRoutes DELETE(string, ...HandlerFunc) IRoutes PATCH(string, ...HandlerFunc) IRoutes PUT(string, ...HandlerFunc) IRoutes OPTIONS(string, ...HandlerFunc) IRoutes HEAD(string, ...HandlerFunc) IRoutes StaticFile(string, string) IRoutes StaticFileFS(string, string, http.FileSystem) IRoutes Static(string, string) IRoutes StaticFS(string, http.FileSystem) IRoutes }
gin框架中可以使用路由組來實現(xiàn)對路由的分類。路由組是router.Group中的一個方法,用于對請求進行分組。如下案例所示:
register和login info都是對應(yīng)著不同的請求類型。
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { engine := gin.Default() routeGroup := engine.Group("/user") routeGroup.POST("/register", func(c *gin.Context) { fullPath := "用戶注冊" + c.FullPath() fmt.Println(fullPath) c.Writer.WriteString(fullPath) }) engine.Run() }
在多路由的分組處理,可以使用engine.Group去處理我們的請求,方便按照我們的請求進行分類,然后也方便我們進行開發(fā)。
package main import ( "fmt" "github.com/gin-gonic/gin" ) func main() { engine := gin.Default() routeGroup := engine.Group("/user") routeGroup.POST("/register",registerHandler) routeGroup.POST("/login", loginHandler) routeGroup.DELETE("/:id", deleteHandler) engine.Run() } func registerHandler(c *gin.Context) { fullPath := "用戶注冊" + c.FullPath() fmt.Println(fullPath) c.Writer.WriteString(fullPath) } func loginHandler(c *gin.Context) { fullPath := "用戶登入" + c.FullPath() fmt.Println(fullPath) c.Writer.WriteString(fullPath) } func deleteHandler(c *gin.Context) { fullPath := "用戶刪除" + c.FullPath() userID := c.Param("id") fmt.Println(fullPath) c.Writer.WriteString(fullPath + " userID:" + userID) }
在實際的過程當中設(shè)計到多模塊的開發(fā)那么就可以使用路由分組的功能,會大大的提高開發(fā)效率。提高代碼的可讀性。
到此這篇關(guān)于Golang使用Gin框架實現(xiàn)路由分類處理請求流程詳解的文章就介紹到這了,更多相關(guān)Go路由分類處理請求內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
詳解Go語言RESTful JSON API創(chuàng)建
這篇文章主要介紹了詳解Go語言RESTful JSON API創(chuàng)建,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例
時間和日期是我們編程中經(jīng)常會用到的,下面這篇文章主要給大家介紹了關(guān)于golang中time包之時間間隔格式化和秒、毫秒、納秒等時間戳格式輸出的方法實例,需要的朋友可以參考下2022-08-08GoFrame框架garray并發(fā)安全數(shù)組使用開箱體驗
這篇文章主要介紹了GoFrame框架garray并發(fā)安全數(shù)組使用開箱體驗,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流的實現(xiàn)
本文主要介紹了Golang調(diào)用FFmpeg轉(zhuǎn)換視頻流,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-02-02Golang在Window環(huán)境使用Imagick7的過程
這篇文章主要介紹了Golang在Window環(huán)境使用Imagick7的過程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2023-11-11