今天在学gin-vue-admin的时候,看了作者做的一个视频,看到路由的使用的时候看的一知半解,这里面的路由跟我们平常见到的怎么不一样,而且他的这个路由看起来就高大上。也许大家都会有一个疑问,那就是他这里面的路由是怎么工作的?带着这个问题,再根据作者的源代码,理清一下思路,弄明白路由的使用。
在看路由之前先看一下gin-vue-admin框架后端的启动流程,从main方法开始看。
func main() {
global.GVA_VP = core.Viper() // 初始化Viper
initialize.OtherInit()
global.GVA_LOG = core.Zap() // 初始化zap日志库
zap.ReplaceGlobals(global.GVA_LOG)
global.GVA_DB = initialize.Gorm() // gorm连接数据库
initialize.Timer()
initialize.DBList()
if global.GVA_DB != nil {
initialize.RegisterTables() // 初始化表
// 程序结束前关闭数据库链接
db, _ := global.GVA_DB.DB()
defer db.Close()
}
core.RunWindowsServer()
}
这里面主要是初始化一些东西,那刚学的小伙伴就会好奇,为什么没有初始化路由?
路由是肯定会初始化的,只不过没有明显的标在main方法中,注意core.RunWindowsServer()这一段,光看是不能发现什么的,但是进去后就会发现别有洞天。
func RunWindowsServer() {
if global.GVA_CONFIG.System.UseMultipoint || global.GVA_CONFIG.System.UseRedis {
// 初始化redis服务
initialize.Redis()
}
// 从db加载jwt数据
if global.GVA_DB != nil {
system.LoadAll()
}
Router := initialize.Routers()
Router.Static("/form-generator", "./resource/page")
address := fmt.Sprintf(":%d", global.GVA_CONFIG.System.Addr)
s := initServer(address, Router)
// 保证文本顺序输出
// In order to ensure that the text order output can be deleted
time.Sleep(10 * time.Microsecond)
global.GVA_LOG.Info("server run success on ", zap.String("address", address))
global.GVA_LOG.Error(s.ListenAndServe().Error())
}
作者在这里面初始化了router,Routers里面就跟我们平常看到的路由结构差不多了。
但是很多人不是在这里不明白,则是创建路由的时候作者套的里三层外三层的让人非常的头大。下面我们来分析一下作者的目的。
创建路由原理分析
在这里面作者放了很多的路由组,方便路由的管理,这里面的路由组会映射到同级别下的enter.go文件的结构体里面
后面的路由构造跟上面的大差不差。