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