紧接着上一篇,本文咱们对go-admin下载后的源码进行分析。mysql
首先对项目所使用的第三方库进行分析,了解做者使用的库是不是通用的官方库能够有助于咱们更快地阅读程序。接着对项目的main()方法进行分析,由于程序使用cli的方式启动,对cli不一样的命令进行分析。基于此俩点开始工做。git
cobragithub
强大的cli封装,支持命令嵌套golang
castweb
简单安全的类型转换sql
casbin数据库
轻量级开源访问控制框架,采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等api
gorm跨域
一个神奇的,对开发人员友好的 Golang ORM 库缓存
随着微服务的流行,服务和服务之间的稳定性变得愈来愈重要。Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从流量控制、熔断降级、系统自适应保护等多个维度来帮助您保障微服务的稳定性。
分布式追踪库
定时任务库,支持cron表达式
main.go做为程序第一个入口文件,main()方法做为程序入口
使用corboa命令行的方式进行启动,有多个不一样的命令,以下所示
go-admin version
go-admin config
go-admin server
go-admin migrate
不一样的命令有不一样的参数进行配置
命令的代码在根目录cmd下分文件保存,经过cobra.go做为统一入口
corbora的使用遵循一个通用的规则。首先建立一个cmd文件夹,在其中定义一个分支命令便是定义一个新的go文件。本项目所使用的方式也相似,每个命令都 定义一个文件夹,分别管理本身命令的内容,最后经过cobra.go这个上层入口暴露出来。
定义指令 version,runE执行调用run方法,控制台打印版本号
与上一个version指令相似,只是多一个输入参数,用来指定路径。
init初始化方法定义输入的flag参数,当执行go-admin config -c 路径,进入run()方法。
run方法中
一、config.Setup(configYml),将yml配置文件转为不一样的实体类
二、打印不一样的分类内容
数据库迁移指令
基于gorm的migrate方法,定义本身的initdata内容,执行指令完成数据库迁移工具。
有点相似.net core中的code first模式
重点!!!
咱们直接进行 server 命令的分析
api文件夹下的server.go文件,对应服务启动指令
init() 方法中是对 命令行参数的解析和初始化路由方法的绑定
以上代码分为俩部门看
一、对server 指令的参数绑定
二、route.InitRouter方法添加到AppRouters中,等待后续执行
router.InitRouter方法来源于 /admin/router/initrouter.go
文件
initrouter.go中包含多项内容
一、经过配置获取程序所用引擎,当前只支持gin,后续做者可能会进行添加。
二、经过配置判断是否使用ssl加密,若是使用""注册tls处理中间件"
三、读取配置获取数据库类型,链接字符串获取gorm具体数据库的接口实现,自定义中间件设置数据库上下文,集成到gin使用
四、配置Sentinel限流规则
阿里开源的一套东西,须要研究研究
五、通用的系统中间件载入
中间件的业务逻辑包含在 /admin/middleware中
日志处理 logger.go
做者本身生态的日志封装,基于logrus和zap的实现,具体没看
逻辑是获取request的请求信息写入文件日志,若是包含特定请求写入数据库(后期可能会废弃)
全局异常处理
当出现全局异常的时候捕获异常,避免程序直接挂掉
缓存
NoCache是一个附加头的中间件函数。防止客户端缓存HTTP响应。
意思是客户端不进行缓存,每次都要的请求向服务器发起
跨域
增长跨域请求头信息,容许全部请求的跨域
这块以后应该集成第三方,实现知足特定须要的跨域
安全
Secure是附加了security的中间件功能
链路追踪
链路追踪是实现每请求的时间线展现吗仍是什么,这块还须要研究
六、 jwt认证方式实现
七、注册业务路由
区分俩种
须要认证的路由,基于上述jwt
不须要认证的路由
我感受这有点像是web core中的依赖注入的概念,首先进行各服务的注册注入而后启动服务的某些功能,固然实际上仍是有不少不一样的,只是忽然这么想到了而已
PreRun
启动前的初始化配置
读取配置文件,配置三种全局日志,分别为
初始化数据库连接,经过配置文件获得不一样的数据库,并执行不一样的数据库驱动
驱动位于/go-admin/common/database/_driver后缀
已集成mysql,pgsql,sqlites的驱动
配置接口控制全局,基于casbin
RunE
启动配置
判断是否为开发环境,增长环境监控
将初始化配置的路由中间件载入
定义服务端口,ssl等信息
启动定时服务
打印启动日志
启动服务
srv := &http.Server{ Addr: config.ApplicationConfig.Host + ":" + config.ApplicationConfig.Port, Handler: global.Cfg.GetEngine(), }
定义启动服务的host+port
定义启动服务的句柄,当前支持的方式是gin
srv.ListenAndServe 启动服务,打印启动时的日志
命令的解析大致以下,接下来针对框架中的细节的进行描述,请等待做者的更新。