go-admin在线开发平台学习-3[细节解析]
本章节主要的内容是对go-admin中的一些有趣编码进行分析,为自己以后提供一些借鉴
使用cli方式启动项目
使用cobra[眼镜蛇]完成强壮cli的工具,确保稳定。
使用cli的方式启动项目的好处显而易见,可以在进行配置的自定义化,而不是固定的使用某个配置文件中的信息。在一些需要频繁更换命令参数的场景下尤为有效。
cobra的使用有一个默认的规定,即新建一个cmd
文件夹,基于这个文件夹定义自己的命令结构
1、小型项目
cmd 文件夹
-- root.go 根命令
-- version.go 版本命令【子命令】
2、中/大型项目
cmd 文件夹
--version 文件夹
--server.go
--config 文件夹
--server.go
-- root.go 入口指令
不同的项目选用不同的方式进行命令的定义。
监听中断信号
信号监听,当遇到ctrl+c的时候当前服务结束,打印结束日志
配置文件Viper的使用
viper的使用,配置文件路径,获取viper根类
其他的内容与此方式类似
viper.Sub获取对应分类的内容,然后使用自定义的Init***函数初使化类
/tools/config文件夹中定义实体类,对应config.yml中的分类
举例:application.go对应图二的application分类内容,其他的也是同样意思

此目录下的内容,package包名为config。config下的配置信息使用大写表示【对外暴露】。如果其他地方要调用,引用包后使用config.分类名称.参数
即可得到配置文件的内容
初始化数据库
配置文件 dirver:mysql,定义不同的数据库字符串,程序启动时case 连接字符串,对不同的数据库类型做不同的配置
数据库日志开关作为单独配置区分,如果开启,数据库日志单独启用
现在程序的数据库.go都需要实现接口如下
interface定义接口,其他的go文件实现接口-使用不同的开源数据库驱动
接口访问控制
casbin
轻量级开源访问控制框架,采用了元模型的设计思想,支持多种经典的访问控制方案,如基于角色的访问控制 RBAC、基于属性的访问控制 ABAC 等
策略文件
使用 github.com/casbin/gorm-adapter/v3
作为casbin的数据库适配器即可
数据库上下文集成gin
gin一次请求共用一个数据库实例
r.Use()是gin的中间件扩展方法,WithContextDb方法说明的是,如果每次请求到来会打开一次数据库链接,获得数据库链接实例,将实例返回后作为参数传递给方法。如果有此实例,c.Set()方法执行,将此实例保存到gin执行上下文中。
全局异常处理
使用一个异常捕获方法recover()补获未知晓的异常
如果异常消息符合定义的规则,打印后返回给前台。
如果无异常,正常执行下一个定义的中间件
web服务运行区分ssl和正常
从配置文件中获取内容,定义addr
得到对应的web执行引擎,当前使用gin
启动一个协程,判断如果ssl,使用TlS方法。否则使用正常模式
__EOF__

本文链接:https://www.cnblogs.com/foxhappy/p/14412473.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端