Viper 读取配置

创建一个配置文件 config.yaml

server:port: 8080timeout: 30  # 超时时间(秒)
database:host: "localhost"user: "root"password: "123456"name: "mydb"

然后用 Viper 读取这个配置,代码如下:

package mainimport ("fmt""log""github.com/spf13/viper"
)func main() {// 1. 告诉 Viper 配置文件在哪viper.SetConfigFile("config.yaml") // 指定配置文件// 2. 读取配置文件err := viper.ReadInConfig()if err != nil {log.Fatalf("配置文件读不了:%v", err)}// 3. 读取具体配置项serverPort := viper.GetInt("server.port")       // 读服务器端口dbHost := viper.GetString("database.host")      // 读数据库地址dbPassword := viper.GetString("database.password") // 读数据库密码// 4. 使用配置fmt.Printf("服务器将启动在 %d 端口\n", serverPort)fmt.Printf("将连接数据库:%s@%s\n", dbHost, dbPassword)// 5. 演示:设置默认值(如果配置文件没写,就用这个)viper.SetDefault("server.debug", false)isDebug := viper.GetBool("server.debug")fmt.Printf("是否开启调试模式:%v\n", isDebug)
}

动态监听配置

Viper 支持动态监听配置文件变化,不用重启程序就能感知到 config.yaml 的修改并应用新配置。

package mainimport ("fmt""log""time""github.com/fsnotify/fsnotify""github.com/spf13/viper"
)func main() {// 1. 配置 Viper 读取 config.yamlviper.SetConfigFile("config.yaml")if err := viper.ReadInConfig(); err != nil {log.Fatalf("无法读取配置文件: %v", err)}// 2. 打印初始配置printCurrentConfig()// 3. 启动配置监听(关键代码)viper.WatchConfig()// 4. 注册配置变化的回调函数(配置修改后会自动执行)viper.OnConfigChange(func(e fsnotify.Event) {fmt.Println("\n配置文件被修改了!路径:", e.Name)// 重新打印配置,查看变化printCurrentConfig()})// 让程序保持运行,方便测试fmt.Println("\n程序正在运行,尝试修改 config.yaml 看看效果...")for {time.Sleep(time.Second)}
}// 打印当前配置的函数
func printCurrentConfig() {port := viper.GetInt("server.port")debug := viper.GetBool("server.debug")dbHost := viper.GetString("database.host")fmt.Printf("当前配置:端口=%d, 调试模式=%v, 数据库地址=%s\n", port, debug, dbHost)
}

运行程序,初始会打印配置
不要关闭程序,手动修改 config.yaml 中的内容(比如把 port: 8080 改成 port: 9090)
保存文件后,程序会立刻输出 "配置文件被修改了",并显示新的配置值

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/95650.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/95650.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/95650.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

kafka Partition(分区)详解

一、什么是 PartitionPartition(分区) 是 Kafka Topic(主题) 的最小并行单位。一个 Topic 可以包含多个 Partition,每个 Partition 底层对应一个有序、不可变的消息队列,消息只会顺序追加。Partition 内部消…

中创中间件适配HGDB

文章目录环境文档用途详细信息环境 系统平台:Microsoft Windows (64-bit) 10 版本:5.6.5 文档用途 本文章主要介绍中创中间件简单适配HGDB。 详细信息 一、数据源配置 1.数据库准备 (1)安装HGDB并创建一个名为myhgdb的数据…

服务器内存和普通计算机内存在技术方面有什么区别?

服务器内存和普通计算机内存在技术上的区别,主要体现在为满足不同工作场景和要求而采用的设计和特性上。下面这个表格汇总了它们的主要技术差异,方便你快速了解: ​技术特性​​服务器内存​​普通计算机内存​​错误校验 (ECC)​​支持ECC(…

哪款AI生成PPT工具对职场新人最友好?操作门槛最低的是哪个?

一句话生成专业PPT,职场新人也能轻松做出高质量演示文稿现代职场节奏快,PPT制作已成为必备技能。然而,职场新人常面临两大挑战:缺乏设计经验,以及需要在有限时间内完成高质量演示。传统PPT制作耗时费力,需梳…

1.注解的力量:Spring Boot如何用注解重构IoC容器

文章目录1.1 IoC容器:Spring的智能管家1.2 注解驱动:给管家下指令1.2.1 SpringBootApplication:总管家的聘书1.2.2 组件注解:员工的身份标识1.2.3 Autowired:依赖注入的三种方式1.2.4 Bean注解:手动招聘特殊…

【算法】92.翻转链表Ⅱ--通俗讲解

一、题目是啥?一句话说清 给你一个链表和两个整数 left 和 right,反转从第 left 个节点到第 right 个节点的子链表,并返回反转后的链表。其他部分保持不变。 示例: 输入:head = [1,2,3,4,5], left = 2, right = 4 输出:[1,4,3,2,5](反转了从第2到第4个节点) 二、解题…

Nature子刊:新发现!深层脑网络中发现强迫症症状的神经生物标志物

强迫症(OCD)是一种令人困扰的精神疾病,患者常常被强迫思维和强迫行为所困扰。例如,有些人会反复洗手,无法控制自己的清洁冲动;还有些人会不断检查门窗是否关好,即便他们已经确认过无数次。这些行…

Onlyoffice集成与AI交互操作指引(Iframe版)

Onlyoffice集成与AI交互操作指引(Iframe版) 本文档系统介绍了软件系统集成OnlyOffice实现在线编辑与AI辅助功能的方案。主要内容包括:后端需提供文档配置信息并实现Callback接口以处理文档保存;前端通过Vue集成编辑器&#xff0c…

TypeScript 中 keyof、typeof 和 instanceof

在 TypeScript 开发中,keyof、typeof 和 instanceof 是核心的类型操作符和操作符,专门用于提升类型安全、代码可读性和维护性。1. keyof 操作符定义和用途:keyof 是一个类型操作符,用于获取对象类型的所有键(属性名&am…

分布式专题——1.1 Redis单机、主从、哨兵、集群部署

1 Redis 部署 下面演示在 Linux 环境下部署 Redis7。 1.1 单机部署 1.1.1 检查安装 gcc 环境Redis 是由 C 语言编写的,它的运行需要 C 环境,因此我们需要先安装 gcc; # 关闭防⽕墙 systemctl stop firewalld.service # 查看防火墙状态 firewa…

2025年渗透测试面试题总结-54(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。1、SQL注入的防护方法有哪些? 2、永恒之蓝的漏洞原理是什么?怎么做到的? 3、命令…

安卓学习 之 按钮点击事件

今天学习安卓应用中的按钮点击事件:总结下来在安卓应用中的Button注册点击事件的方法主要是以下4种方法,稍后会逐个介绍: 第一种方法:自定义内部类的方法 第二种方法:匿名内部类的方法 第三种方法:当前Acti…

鸿蒙NEXT主题设置指南:应用级与页面级主题定制详解

在鸿蒙应用开发中,灵活的主题设置能力是实现个性化用户体验的关键技术,HarmonyOS NEXT提供了强大而灵活的主题设置功能,让开发者能够轻松实现应用级和页面级的主题定制。在当今追求个性化的时代,用户希望应用能够根据自己的喜好呈…

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动

全球汽车氮化镓技术市场规模将于2031年增长至180.5亿美元,2025-2031年复合增长率达94.3%,由Infineon和Navitas驱动汽车氮化镓技术正从一个有前景的细分市场加速进入主流电力电子领域。根据QYResearch(恒州博智)的《全球汽车GaN技术…

xftp断网后提示错误如何继续下载?

问题:xftp断网后提示错误如何继续下载?解决方法:断网后,先连接上网,然后继续双击右侧的那两个要传输的文件,然后会弹出一个覆盖还是继续下载(如下图)的选择框,选择继续下…

Day22_【机器学习—集成学习(4)—Boosting—GBDT算法】

提升树 (Boosting Decision Tree )每一个弱学习器通过拟合残差来构建强学习器梯度提升树 (Gradient Boosting Decision Tree)每一个弱学习器通过拟合负梯度来构建强学习器一、提升树残差数学公式为:残差真实值−预测值…

前缀和、子矩阵的和;差分、差分矩阵

一、前缀和数组要稍微注意前缀和数组从1开始#include <iostream>using namespace std;const int N 100010;int n, m; int a[N], s[N];int main() {scanf("%d%d", &n, &m);for (int i 1; i < n; i ) scanf("%d", &a[i]);for (int i…

启用BBR拥塞控制算法

目录 &#x1f4cb; 先决条件 &#x1f527; 启用步骤 &#x1f4dd; 额外检查与说明 ⚠️ 注意事项 BBR&#xff08;Bottleneck Bandwidth and Round-trip time&#xff09;是谷歌开发的一种TCP拥塞控制算法&#xff0c;它能有效提升网络传输速度和性能&#xff0c;尤其在…

Python:AI开发第一语言的全面剖析

文章目录引言1. Python的历史与AI开发的契合1.1 Python的诞生与设计哲学1.2 Python与AI发展的历史交汇2. 语言特性如何支持AI开发2.1 动态类型与交互式编程2.2 简洁优雅的语法2.3 高级数据结构的原生支持2.4 函数式编程特性2.5 强大的元编程能力3. 丰富的AI生态系统和库支持3.1…

Nikto 漏洞扫描工具使用指南

目录 ✨ 核心功能一览 &#x1f680; 基本使用方法 1. 扫描单个目标 2. 指定端口扫描 3. 扫描 HTTPS 目标 使用 -ssl 参数主要有两个核心原因 ⚙️ 高级使用技巧 1. 使用代理扫描 2. 保存扫描结果 3. 使用特定插件 4.交互命令 ✨ 核心功能一览 Nikto 是一款开源的 W…