基于gin-vue-admin的路由部分拆解

拆解基础的ginServer

最开始gin版本

package main

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

func main() {
	// 创建一个默认的路由引擎
	r := gin.Default()
	// GET:请求方式;/hello:请求的路径
	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
    r.Group("/a")
	r.GET("/hello", func(c *gin.Context) {
		// c.JSON:返回JSON格式的数据
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})
	// 启动HTTP服务,默认在0.0.0.0:8080启动服务
	r.Run()
}

改造后的

main页面编写

package main

import (
	"github.com/gin-gonic/gin"
	"handitem/xxb-gin-web/global"
	"handitem/xxb-gin-web/initilization"
	"handitem/xxb-gin-web/model/user"
)

func main() {
	//1、读取配置文件
	initilization.InitViper()

	//2.初始化中间 redis/mysql/mongodb
	initilization.InitMySQL()

	// 这个default被  InitGinRouter替代
	//r := gin.Default()

    
	// GET:请求方式;/hello:请求的路径
	// 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
	// r.GET("/hello", func(c *gin.Context) {
	// 	// c.JSON:返回JSON格式的数据
	// 	c.JSON(200, gin.H{
	// 		"message": "Hello world!",
	// 	})
	// 	h := user.User{Name: "haha"}
	// 	global.KSD_DB.Model(&user.User{}).Create(&h)
	// })

    
	// 这个run被 initilization.RunServer() 替代
	initilization.RunServer()
	//r.Run()
}

r.Run()的改写

main页面就是调用的这个函数启动服务 注意这里也是需要读取配置文件的 读取的是server.port

func RunServer() {
	// 初始化路由
	srv := InitGinRouter()
	// 为用户头像和文件提供静态地址
	srv.StaticFS("/static", http.Dir("/static"))
	address := global.Config.Server.Port
	// 启动HTTP服务,courseController
	s := initServer(address, srv)
	// 保证文本顺序输出
	// In order to ensure that the text order output can be deleted
	time.Sleep(10 * time.Microsecond)

	s2 := s.ListenAndServe().Error()
	fmt.Println("服务启动完毕 ", s2)
}

gin.default的改写

基础写法

r := gin.Default()
r.Group("/a")

抽离写法

在initilization包下创建init_router.go
这个文件就是把r.Group给拆解成的,最后返回带有路由组的*gin.Engine 供ginserver使用

package initilization

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"handitem/xxb-gin-web/global"
	"net/http"
	"time"
)
func InitGinRouter() *gin.Engine {
	// 创建gin服务
	ginServer := gin.Default()
	// 提供服务组
	//courseRouter := router.RouterWebGroupApp.Course.CourseRouter
	videoRouter := router.RouterWebGroupApp.Video.VideoRouter
	//loginRouter := login.LoginRouter{}
	//codeRouter := code.CodeRouter{}
	// 接口隔离,比如登录,健康检查都不需要拦截和做任何的处理
	//loginRouter.InitLoginRouter(ginServer)
	//codeRouter.InitCodeRouter(ginServer)
	// 业务模块接口,
	publicGroup := ginServer.Group("/api")
	{
		videoRouter.InitVideoRouter(publicGroup)
		//courseRouter.InitCourseRouter(publicGroup)
	}

	fmt.Println("router register success")
	return ginServer
}

InitVideoRouter

在项目文件下创建router文件夹,在router下创建video文件夹,在video下创建router.go
这个文件对应的是基础页面里面的r.get(“xxx”,func(){}),只不过这里把func又抽出去一层,抽到service一层
● 基础写法

r.GET("/hello", func(c *gin.Context) {
		// c.JSON:返回JSON格式的数据
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})
	```
● 抽离写法
```go
package video

import (
	"github.com/gin-gonic/gin"
	v1 "handitem/xxb-gin-web/api/v1"
)

type VideoRouter struct{}

func (e *VideoRouter) InitVideoRouter(Router *gin.RouterGroup) {
	controller := v1.WebApiGroupApp.Video.VideoController
	// 这个路由多了一个对对post,put请求的中间件处理,而这个中间件做了一些对post和put的参数的处理和一些公共信息的处理
	videoRouter := Router.Group("video") //.Use(middleware.OperationRecord())
	{
		videoRouter.GET("find", controller.FindVideos)
		videoRouter.GET("get", controller.GetByID)
	}
}

最后就是service层调用具体方法的实现

基础写法
● 这里的方法实现是用一个匿名方法完成的

r.GET("/hello", func(c *gin.Context) {
		// c.JSON:返回JSON格式的数据
		c.JSON(200, gin.H{
			"message": "Hello world!",
		})
	})
	```
抽离写法
● 这是用调用具体的方法实现的
```go
package video

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

type VideoController struct{}

// 查询video
func (videoController *VideoController) FindVideos(c *gin.Context) {

}

// 获取明细
func (videoController *VideoController) GetByID(c *gin.Context) {
	// 绑定参数用来获取/:id这个方式
	//id := c.Param("id")
	// 绑定参数 ?ids=1111
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值