当前位置: 首页 > news >正文

Golang快速开发框架——项目立项与系统配置读取组件viper(一)

Golang快速开发框架——项目立项与系统配置读取组件viper(一)

背景

知识分享之Golang篇是我在日常使用Golang时学习到的各种各样的知识的记录,将其整理出来以文章的形式分享给大家,来进行共同学习。欢迎大家进行持续关注。

知识分享系列目前包含Java、Golang、Linux、Docker等等。

开发环境

  • 系统:windows10
  • 语言:Golang
  • golang版本:1.17
  • 代码仓库:FastDevelopGo

内容

日常我们使用golang开发项目时经常需要使用一些基础组件,每次新建较为繁琐,现有市面上的感觉不太适合自己,因此决定自己搭建一套,同时开源出来分享给大家使用,欢迎大家提出各种需求。下面我们开始搭建这个框架。

1、整体目录划分

  • conf ------------------ 配置文件
  • deploy ------------------ 部署相关
  • doc --------------------- 框架相关文档
  • main ------------------- 初始入口
  • router ------------------ 业务路由
  • src ---------------------- 业务代码
    • base ------------------ 框架基础模块
      • config -------------------- 配置文件管理部分
      • constant ------------------ 常量包
      • begin ---------------------- 框架初始启动部分
      • util ---------------------- 基础工具类部分
  • go.mod ---------------- 模块管理配置文件

2、开始整合自定义配置文件读取组件

2.1、分析对比

日常我们读取配置文件时常用的格式有:

  • json 格式字符串
  • xml 文件
  • yml 格式文件
  • toml 格式文件
  • ini 格式文件
    常用的golang配置文件读取库目前市面上也有很多,其中我认为Viper更适合于这个框架的使用,因此本次框架中使用该组件库作为配置文件的管理组件。
2.2、安装Viper
go get github.com/spf13/viper
2.3、创建启动函数,并增加初始化功能,作为框架启动时的初始化模块。
package beginimport ("bufio""flag""fmt""github.com/spf13/viper""os""strings"
)// Start 主配置启动函数
func Start() error {sysConfigDir := flag.String("d", "./conf/", "配置一个启动配置文件存放目录,默认:./conf/")flag.Parse()sysConfigName := flag.String("n", "sys", "配置启动配置文件名称,默认:sys")flag.Parse()sysConfigType := flag.String("t", "toml", "配置启动配置文件类型,默认:toml")flag.Parse()// 加载启动配置configLoad(*sysConfigDir, *sysConfigName, *sysConfigType)return nil
}func configLoad(sysConfigDir, sysConfigName, sysConfigType string) {// 设定读取名称viper.SetConfigName(sysConfigName)// 设定配置文件类型viper.SetConfigType(sysConfigType)// 设定扫描目录viper.AddConfigPath(sysConfigDir)// 读取配置文件if err := viper.ReadInConfig(); err != nil {if _, ok := err.(viper.ConfigFileNotFoundError); ok {reader := bufio.NewReader(os.Stdin)fmt.Println("没有找到配置文件,是否自动创建默认配置文件并启动?y/n")// Config file not found; ignore error if desiredfor ok {fmt.Print("-> ")isContinue, err := reader.ReadString('\n')if err != nil {panic(fmt.Errorf("发生致命错误: %w \n", err))break} else {// 转换为小写并去除前后空格isContinue = strings.TrimSpace(strings.ToLower(isContinue))// 判断输入是否正确if isContinue == "y" || isContinue == "yes" || isContinue == "0" {// 正常进行//TODO 调用自动化创建初始配置文件函数break} else if isContinue == "n" || isContinue == "no" || isContinue == "1" {// 结束break}}}} else {// Config file was found but another error was producedpanic(fmt.Errorf("配置文件致命错误: %w \n", err))}}
}
2.4、进行启动测试,读取和命令行输入确认有效完成。
func main() {begin.Start()
}

到这里我们就创建完成了这个框架的基础框架包结构和配置文件读取功能和启动时命令参数设定功能,下一节我们对于该部分的初始配置文件和缺失时如何创建进行代码补充,欢迎持续关注,同时在搭建过程中遇到的一些代码小知识我也会同步整理出来制作成小demo便于大家学习使用。

注:
这个框架我的初步想法时后续增加可视化页面、代码快速生成模块、项目框架快速生成模块等等,有其他需求想法的小伙伴欢迎在评论区留言或直接到代码仓库中提出宝贵的issue

欢迎大家积极start,大家的关注是我最大的动力。

  • 代码仓库:FastDevelopGo
本文声明:

88x31.png

知识共享许可协议
本作品由 cn華少 采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。

最后编辑于:2025-06-15 09:57:57


喜欢的朋友记得点赞、收藏、关注哦!!!

http://www.lqws.cn/news/577639.html

相关文章:

  • uni-app使用uview2自定义tabber
  • camera调试:安卓添加xml注册
  • 【软考高项论文】论信息系统项目的整体管理
  • Java 图书管理系统
  • 使用Verilog设计模块输出中位数,尽可能较少资源使用
  • 华为智选焕新鸿蒙智选,继续携手IAM赋能智慧家居健康生态协同演进
  • SmartDV推出先进的H.264和H.265视频编码器和解码器IP
  • Flutter 布局之 IntrinsicHeight 组件
  • 类图+案例+代码详解:软件设计模式----生成器模式(建造者模式)
  • 系统性能优化-8 TCP缓冲区与拥塞控制
  • Java开发新变革!飞算JavaAI深度剖析与实战指南
  • 深入理解 MVCC:数据库高并发的核心引擎
  • 高效数据采集:Python与Rust完美结合
  • Redis有哪些常用应用场景?
  • 1.6 基于NICE接口的存储器访问通道扩展自定义指令的简单示例
  • 大语言模型LLM在训练/推理时的padding
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 衡石科技chatbot分析手册--钉钉数据问答机器人配置
  • 设计模式之外观模式
  • 【微服务】.Net中使用Consul实现服务高可用
  • 大语言模型微调的效能控制与评估策略
  • 提示技术系列——链式提示
  • 跨主机用 Docker Compose 部署 PostgreSQL + PostGIS 主从
  • 对象池模式:减少GC的Kotlin实战指南
  • 基于 SpringBoot+Vue.js+ElementUI 的 Cosplay 论坛设计与实现7000字论文
  • LeetCode 1456. 定长子串中元音的最大数目
  • MapReduce
  • EtherCAT主站教程4--IGH主站代码详解
  • 云手机的用途都有哪些?
  • Deep Mean-Shift Priors for Image Restoration论文阅读