欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang使用Gin框架實(shí)現(xiàn)路由分類處理請(qǐng)求流程詳解

 更新時(shí)間:2023年05月16日 11:01:29   作者:富士康質(zhì)檢員張全蛋  
Gin是一個(gè)golang的微框架,封裝比較優(yōu)雅,具有快速靈活,容錯(cuò)方便等特點(diǎn),這篇文章主要介紹了Golang使用Gin框架實(shí)現(xiàn)路由分類處理請(qǐng)求,感興趣的同學(xué)可以參考下文

在前面已經(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。

類似這種接口前綴統(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)文章

最新評(píng)論