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

2--引入并解析YAML配置文件

在 Go 语言生态中,引入和解析 YAML 配置文件最主流、最好用的库是 spf13/viper。它不仅支持 YAML,还支持 JSON、TOML 等多种格式,并且能很方便地把配置映射到 Go 的结构体(Struct)中,提供给全项目使用。

一. 配置Viper依赖包

打开终端,在项目根目录下(即 ...\Secgo-Mall\)运行以下命令来安装 viper

go get -u github.com/spf13/viper

二. 创建 YAML 配置文件

我们在 config 目录下创建一个 config.yaml 文件,先把项目最基础的 Server 配置(如端口、运行模式)放进去。

 server:  # 服务运行端口   port: 8080  # 运行模式: debug 或 release  mode: "debug"

三. 编写配置读取代码(Config 包)

为了让整个项目都能随时随地读取到配置,我们需要写一个独立的 config 包。利用 Viper,我们把 YAML 里的内容解析到强类型的 Go Struct 中。这样在使用时可以通过代码提示直接点出来,非常安全且高效。

在 config/ 下创建 config.go`:

package configimport ("log""github.com/spf13/viper"
)// ServerConfig 映射 yaml 文件中的 server 部分
type ServerConfig struct {Port int    `mapstructure:"port"`Mode string `mapstructure:"mode"`
}// Config 是整个项目的配置树
type Config struct {Server ServerConfig `mapstructure:"server"`
}// GlobalConfig 定义一个全局变量,供其他包直接使用
var GlobalConfig *Config// InitConfig 初始化 Viper 并解析配置文件
func InitConfig() {viper.SetConfigFile("config/config.yaml") // 指定配置文件路径viper.SetConfigType("yaml")                // 指定配置文件类型if err := viper.ReadInConfig(); err != nil {log.Fatalf("Error reading config file: %v", err)}if err := viper.Unmarshal(&GlobalConfig); err != nil {log.Fatalf("Unable to decode into struct: %v", err)}
}

第四. 修改 main.go 接入配置

现在回到我们的启动入口,调用刚才写好的 config.InitConfig(),并将原本写死在代码里的 :8080 替换为从配置文件读取。这里把原先 massage 的拼写小错误修正为 message

package mainimport ("fmt""log""github.com/Chuan81/secgo-mall/pkg/config""github.com/gin-gonic/gin"
)func main() {// 初始化配置config.InitConfig()// 设置 Gin 的运行模式(debug/release)gin.SetMode(config.GlobalConfig.Server.Mode)// 创建一个带默认中间件(Logger 和 Recovery) 的路由器r := gin.Default()// 注册一个健康检查的路由,用来测试服务是否正常运行r.GET("/ping", func(c *gin.Context) {c.JSON(200, gin.H{"message": "pong","service": "secgo-mall is up and running",})})addr := fmt.Sprintf(":%d", config.GlobalConfig.Server.Port)log.Printf("Starting Secgo-Mall server on %s\n", addr)// 启动服务器if err := r.Run(addr); err != nil {log.Fatalf("Failed to start server: %v", err)}
}

测试运行一下!

现在你的配置管理系统已经成型了。我们在项目根目录下运行服务:

go run cmd/secgo-mall/main.go

PS C:\Code\Projects\Secgo-Mall> go run cmd/secgo-mall/main.go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.- using env:   export GIN_MODE=release- using code:  gin.SetMode(gin.ReleaseMode)[GIN-debug] GET    /ping                     --> main.main.func1 (3 handlers)
2026/04/10 15:20:58 Starting Secgo-Mall server on :8080
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://github.com/gin-gonic/gin/blob/master/docs/doc.md#dont-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080
[GIN] 2026/04/10 - 15:21:05 | 200 |       0s |             ::1 | GET      "/ping"

你应该能看到 Gin 根据你在 config.yaml 中配置的 mode 和 port 启动了服务。如果你把 config.yaml 里的 mode 改为 "release" 再重新启动,你会发现 Gin 会变得更加安静,不再打印那么多调试日志。

这就是引入Viper使用 YAML 配置文件的基础流程。

http://www.jsqmd.com/news/656506/

相关文章:

  • 减肥总反弹?不是你不努力,是没选对AKK菌! 斐萃AKK揭开减重真相 - 速递信息
  • Texar终极指南:TensorFlow文本生成与NLP工具包完全解析
  • BepInEx插件框架完全指南:从游戏新手到模组达人的进阶之路
  • ANIMATEDIFF PRO应用案例:如何制作具有镜头推进感的AI动态视频?
  • 从零拆解:多旋翼无人机的四大核心系统(新手入门指南)
  • 2026年家用果蔬切刀选购推荐:基于工艺性能与适配场景的客观行业分析 - 商业小白条
  • web第七周课堂笔记
  • 3分钟掌握Windows与Office智能激活:KMS_VL_ALL_AIO完整指南
  • 2026年4月最新亨得利官方售后网点核验报告(含迁址新开)实地考察・多方验证 - 亨得利官方服务中心
  • 别再乱调JVM参数了!实战总结:G1GC在Spring Boot 2.7应用中的5个关键调优项与避坑指南
  • Python新手也能玩转3D!用Ursina引擎5分钟创建你的第一个3D世界(附完整代码)
  • Docker.DotNet 源码解析:深入理解 .NET Docker 客户端的实现原理
  • 2026年4月最新宝珀官方售后网点核验报告(含迁址新开)实地考察・多方验证 - 亨得利官方服务中心
  • 3分钟搞定百度网盘秒传:网页版工具让你的文件分享快10倍
  • nvm安装LTS版本的node报错Node.js v24.11.0 is not yet released or is not available.
  • 2026 年鞍山汽车贴膜全流程深度攻略:从选型到售后一站式指南 - GrowthUME
  • 2026年 旋盖机厂家推荐排行:自动/全自动/泵头/枪头/喷头等多种类型旋盖机优质品牌大揭秘! - 速递信息
  • LGTV Companion终极指南:如何让LG电视成为智能显示器
  • CubiFS分布式锁性能:高并发场景测试终极指南
  • FlowState Lab 生成对抗性时序数据的效果与鲁棒性验证
  • 2026年理料机厂家推荐排行:食品、宠物食品、生物药业等多领域理料机优质品牌之选! - 速递信息
  • 5分钟解锁图片转3D打印:开源神器ImageToSTL完全指南
  • 如何在.NET项目中快速集成网易云音乐API:终极C音乐接口解决方案
  • 悦洁家政:安徽房屋漏水电话 - LYL仔仔
  • 构建现代化WPF应用:Fluent.Ribbon架构深度解析与实践指南
  • ng2-charts 实战:构建响应式财务数据可视化仪表板
  • GodMode9游戏文件处理:从CIA安装到游戏卡转储
  • 2026零基础雅思在线培训全攻略:高适配入门课程与避坑指南 - 品牌2025
  • 3个突破性功能深度解析:cursor-free-vip如何重新定义AI编程助手的使用边界
  • 拇外翻矫正医院推荐 - 外贸老黄