go gin框架(2),路由分组

我们开发功能的时候都是分模块的,比如用户处理模块、商品处理模块、日志处理模块.....

那么我们的路由也是可以分组的:比如我们的用户模块

http://localhost:8000/user/register

http://localhost:8000/user/login

http://localhost:8000/user/info

http://localhost:8000/user/loginout

从这几个访问连接中可以知道,都是处理用户user的url

在gin框架中,能对路由进行分类

engine.Group("/user") 返回的是user路由组,它是一个结构体指针

 RouterGroup结构体中就包含 Engine,Handlers

代码示例:

package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

func main() {
	engine := gin.Default()
	routerGroup := engine.Group("/user")

	routerGroup.POST("/register", RegisterHandler) //用户注册
	routerGroup.POST("/login", LoginHandler) //用户登录
	routerGroup.GET("/userinfo", UserinfoHandler) //用户信息

	engine.Run(":8000")
}
//RegisterHandler 用户注册
func RegisterHandler(context *gin.Context) {
	fullPath := "用户注册:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}
//LoginHandler 用户登录
func LoginHandler(context *gin.Context) {
	fullPath := "用户登录:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}
//UserinfoHandler 用户信息
func UserinfoHandler(context *gin.Context) {
	fullPath := "用户信息:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}

我们的实际项目中,路由分组并不是像如上的示例进行分组,根据mvc的分层,那么每个功能模块会对应一个controller文件(比如说UserController,定义UserController结构体和对应的handler方法),而我们的main中可以定义一个函数注册各功能模块路由组的函数,通过将不同路由组的routerGroup传参给XxxController,在XxxController中去对应各个请求路径的handler方法。

项目目录:

ginobj/main.go

ginobj/controller/userController.go

package main

import (
	"ginobj/controller"
	"github.com/gin-gonic/gin"
)

func main() {
	engine := gin.Default()
	RegisterRout(engine)
	engine.Run(":8000")
}

//RegisterRout 注册各模块的路由组
func RegisterRout(engine *gin.Engine) {
	userRout := engine.Group("/user")
	new(controller.UserController).CreatRout(userRout)
}
package controller

import (
	"fmt"
	"github.com/gin-gonic/gin"
)

type UserController struct{

}
func (u *UserController) CreatRout(routeGroup *gin.RouterGroup) {
	routeGroup.POST("/register",u.RegisterHandler)
	routeGroup.POST("/login",u.LoginHandler)
	routeGroup.GET("/userinfo",u.UserinfoHandler)
}

//RegisterHandler 用户注册
func(u *UserController) RegisterHandler(context *gin.Context) {
	fullPath := "用户注册:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}
//LoginHandler 用户登录
func (u *UserController)LoginHandler(context *gin.Context) {
	fullPath := "用户登录:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}
//UserinfoHandler 用户信息
func (u *UserController)UserinfoHandler(context *gin.Context) {
	fullPath := "111用户信息:"+context.FullPath()
	fmt.Println(fullPath)
	context.Writer.WriteString(fullPath)
}

请求结果(post请求用postman即可,没有提供示例结果)

 当然,如上的路由分组并不能明确看到路由列表,那么可以将路由绑定handler处理放到main的注册路由函数中

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值