# 第005节:使用路由组分类处理请求

# 背景

在实际的项目开发中,均是模块化开发。同一模块内的功能接口,往往会有相同的接口前缀。比如如下所示:

例如在系统中有用户模块,用户有不同注册、登录、用户信息、

注册:http://localhost:9000/user/register
登录:http://localhost:9000/user/login
用户信息:http://localhost:9000/user/info
删除:http://localhost:9000/user/1001

类似这种接口前缀统一,均属于相同模块的功能接口。可以使用路由组进行分类处理。

# Group

gin框架中可以使用路由组来实现对路由的分类。

路由组是router.Group中的一个方法,用于对请求进行分组。如下案例所示:

...
engine := gin.Default()
userGroup := engine.Group("/user")
userGroup.GET("/register", registerHandle)
userGroup.GET("/login", loginHandle)
userGroup.GET("/info", infoHandle)
engine.Run(":9000")
...

func registerHandle(context *gin.Context) {
    fullPath := " 用户注册功能 " + context.FullPath()
    fmt.Println(fullPath)
    context.Writer.WriteString(fullPath)
}

func loginHandle(context *gin.Context) {
    fullPath := " 用户登录功能 " + context.FullPath()
    fmt.Println(fullPath)
    context.Writer.WriteString(fullPath)
}

func infoHandle(context *gin.Context) {
    fullPath := " 信息查看功能 " + context.FullPath()
    fmt.Println(fullPath)
    context.Writer.WriteString(fullPath)
}COPY

Group返回一个RouterGroup指针对象,而RouterGroup是gin框架中的一个路由组结构体定义。我们来看一下RouterGroup的定义如下所示:

type RouterGroup struct {
    Handlers HandlersChain
    basePath string
    engine   *Engine
    root     bool
}COPY

RouterGroup实现了IRoutes中定义的方法,包含统一处理请求的Handle和分类型处理的GET、POST等。IRouters定义如下所示:

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
    Static(string, string) IRoutes
    StaticFS(string, http.FileSystem) IRoutes
}COPY

原创文章,Golang中国出品,文章对应源码下载:https://www.qfgolang.com/?page_id=1973

Last Updated: 11/13/2019, 3:49:46 PM