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

Go后端配置文件教程

注:本文为博主,首次接触项目时的入门级配置实操

在 Go 后端中,使用配置文件管理参数(如数据库连接、服务端口等)是必备技能。Viper 是 Go 生态中最流行的配置管理库。支持多种配置文件、环境变量、命令行参数等,并具备热更新能力。

(热更新:无需重新启动应用,适用于小范围、高频更新)

第一目:首先安装viper

go get github.com/spf13/viper

第二目:基础使用步骤(附代码)

1、创建配置文件
# config.yaml
server:host: "localhost"port: 8081
database:user: "admin"password: "secret"max_connections: 100
2、初始化 Viper 并读取配置
package configimport ("github.com/fsnotify/fsnotify""github.com/spf13/viper"
)func Init() error {viper.SetConfigName("config") // 配置文件名(不含扩展名)viper.SetConfigType("yaml")   // 文件类型viper.AddConfigPath("config") // 搜索路径(当前目录)// 读取配置if err := viper.ReadInConfig(); err != nil {return err}// 监听配置变更viper.WatchConfig()viper.OnConfigChange(func(e fsnotify.Event) {println("配置已更新!新端口:", viper.GetInt("server.port"))})return nil
}
3、在代码中获取配置
package mainimport ("fmt""github.com/renhongcai/gomodule/config""github.com/spf13/viper"
)func main() {if err := config.Init(); err != nil {panic("配置初始化失败:" + err.Error())}host := viper.GetString("server.host") // 读取配置port := viper.GetInt("server.port")    // 设置端口号fmt.Printf("服务启动于:%s:%d\n", host, port)}
4、viper支持的热更新

滞塞一下程序,然后手动更改端口:

package mainimport ("fmt""github.com/renhongcai/gomodule/config""github.com/spf13/viper"
)func main() {if err := config.Init(); err != nil {panic("配置初始化失败:" + err.Error())}host := viper.GetString("server.host") // 读取配置port := viper.GetInt("server.port")    // 设置端口号for true {// 手动阻塞}fmt.Printf("服务启动于:%s:%d\n", host, port)}

更改端口号config.yaml中的 port 8081 -> 8082

打印效果:
配置已更新!新端口: 8082

第三目:进阶的一些操作

1、设置默认值
// 默认
viper.SetDefault("server.port", 3000) // 默认端口,防崩溃
2、绑定环境变量
// 自动调用
viper.AutomaticEnv()                     // 自动读取环境变量
viper.BindEnv("server.port", "APP_PORT") // 绑定 APP_PORT 到 server.port
3、映射到结构体(更推荐)

这样更安全,更省心

type ServerConfig struct {Host string `mapstructure:"host"`Port int    `mapstructure:"port"`
}

main中 

func Init(){var serverCfg ServerConfigviper.UnmarshalKey("server", &serverCfg) // 将 server 节点映射到结构体
}
4、多文件支持
viper.SetConfigFile("db.yaml")
viper.MergeInConfig() // 合并到已有配置

第四目:本篇博客的结构

.
├── config
│   ├── config.go   # Viper 初始化代码
│   └── config.yaml # 主配置文件
├── main.go         # 程序入口
└── go.mod

第五目:经验总结

路径!!路径!!路径!!非常容易配置错

若是大型项目的话,可以将配置文件按照功能,拆分成多个yaml(redis.yaml、http.yaml)

最终通过咱们上方的那个多文件支持,根据需求进行合并操作....

注:注意其优先级顺序:命令好参数 > 环境变量 > 配置文件 > 默认值)

http://www.dtcms.com/a/293082.html

相关文章:

  • LeetCode|Day22|231. 2 的幂|Python刷题笔记
  • AI一周事件(2025年7月15日-7月21日)
  • 开发避坑短篇(4):跨域请求中Session数据丢失的排查与修复方案
  • Qt资源系统:如何有效管理图片和文件
  • 【黑马SpringCloud微服务开发与实战】(五)微服务保护
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 访问鉴权功能实现
  • MMDeploy模型转换与TensorRT推理遇到问题及解决方案
  • GRU模型
  • Trae安装指定版本的插件
  • Clickhouse源码分析-副本数据同步
  • 网络编程---TCP协议
  • Spring AI 系列之十九 - Ollama集成Deepseek
  • 配置https ssl证书生成
  • 数字护网:一次深刻的企业安全体系灵魂演练
  • 接口测试用例选择及效能优化策略
  • vcs门级仿真(后仿真)指南
  • 如何处理各行业的DDOS问题?
  • VUE2 学习笔记3 v-on、事件修饰符、键盘事件
  • JAVA后端面试笔记
  • 前端性能优化:从“龟速“到“闪电“的终极加速指南
  • c++day05(ASCII)
  • Git GitHub精通:前端协作开发的“瑞士军刀“!
  • 字符串相关函数
  • visual studio 性能调试
  • 大数据之Hive:Hive中week相关的几个函数
  • 【Java】SVN 版本控制软件的快速安装(可视化)
  • Qt中的栅格布局的核心机制与栅格布局中的元素隐藏后重新排列布局解决方案解析
  • 基于CH32V203F8P6 interface_debug_print支持浮点格式输出
  • 模型优化-------模型压缩
  • Python之格式化Conda中生成的requirements.txt