Viper快速使用(超简单)

news2024/11/16 5:47:17

Viper主要是用来在配置管理方面用的,只要是稍微大一点的项目都需要进行配置管理,而Viper支持多种配置格式(JSON、YAML、TOML)登,可以配置环境变量,命令行参数登,使得应用程序配置的管理变得非常灵活,可以根据选择不同的喷子源,它还支持为配置设置默认值,以及配置重载,即可以在不重启应用程序的情况下动态的重新加载配置。

1.安装Viper库

​ 首先使用以下命令安装Viper到项目中:

go get -u github.com/spf13/viper
2.导入Viper模块
import "github.com/spf13/viper"
3.创建一个配置文件

我们可以在项目的根目录下创建一个config文件夹然后在文件夹里创建第一个配置文件叫 local.yml

以及创建一个pkg文件夹下面创建一个config文件夹,和config.go和在项目中创建一个main.go文件
在这里插入图片描述
在local.yml中输入要进行配置的内容,注意这个文件内容中的空格位置和换行。

env: local  # 本地开发环境
http:
  host: 0.0.0.0
  #  host: 127.0.0.1
  port: 8000
security:
  api_sign:
    app_key: 123456
    app_security: 123456
  jwt:
    key: QsYjsIruThlAkrfB89fw8prOaObmrch8
data:
  db:
    user:
      driver: mysql
      dsn: root:xxxxxxxxxx@tcp(121.196.222.111:3306)/al_smart_library?charset=utf8mb4&parseTime=True&loc=Local
4.初始化config

首先在config.go文件中写一下初始化配置文件对象的函数。

我在这里把基本的函数注释,以及作用都写在了里面,

基本上的理解就是通过传入参数配置文件(local.yml)的路径去查看内容然后绑定到conf对象。然后监听这个配置文件(local.yml)如果发现改变就及时的更新conf对象。

func NewConfig(p string) *viper.Viper {
	//查询环境变量中配置的路径,如果没有路径就设置为p
	envConf := os.Getenv("APP_CONF")
	if envConf == "" {
		envConf = p
	}

	fmt.Println("load conf file:", envConf)
	return getConfig(envConf)
}

func getConfig(path string) *viper.Viper {
	//初始化一个viper对象,里面是很多map[string]interface{}对象
	conf := viper.New()
	//再次设定config的路径
	conf.SetConfigFile(path)
	//conf会通过路径去读取配置文件的内容
	err := conf.ReadInConfig()
	if err != nil {
		panic(fmt.Errorf("ReadInConfig failed, err: %v", err))
	}
	//监听配置文件,当配置文件被修改的情况下,会重新读取conf
	conf.WatchConfig()
	conf.OnConfigChange(func(in fsnotify.Event) {
		fmt.Println("夭寿啦~配置文件被人修改啦...")
		err := conf.ReadInConfig()
		if err != nil {
			panic(fmt.Errorf("ReadInConfig failed, err: %v", err))
		}
	})
	return conf
}

5.在main方法中使用config

最后在main方法中就可以调用这个初始化config的方法

可以通过我注释的两个fmt.Println(),可以看到打印的内容和local.yml里面的内容一样,说明读取成功了

在下面启动了一个路由器监听8080端口,

尝试在local.yml里面修改配置,控制台也会打印 “夭寿啦~配置文件被人修改啦…”说明配置监听成功了

func main() {
	var envConf = flag.String("conf", "config/local.yml", "config path, eg: -conf ./config/local.yml")
	//flag.Parse的作用是当用户在启动项目的时候会把传递的命令行参数解析为对应变量的值
	//比如说 go run main.go -conf ./config/prod.yml  此时运行项目配置文件就会变成prod.yml了
	flag.Parse()
	//初始化conf,其会自动的查看路径地点的文件内容。

	conf := config.NewConfig(*envConf)

	fmt.Println(conf.GetString("env"))                       //local
	fmt.Println(conf.GetString("security.api_sign.app_key")) //123456
	// 在启动 Gin 服务时使用 Go 协程
	if err := gin.Default().Run(":8080"); err != nil {
		log.Fatalf("Failed to start Gin server: %v", err)
	}
}

在之后比如要写一个数据库的初始化函数的时候,就可以在这个函数中传入conf对象,就可以把数据库的账号密码,ip,端口等信息都放到local.yml文件中,然后在数据库的初始化函数中读取这些信息进行创造db(数据库)对象。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《机器学习》 决策树剪枝、树模型参数及案例演示

目录 一、决策树剪枝 1、什么是决策树剪枝? 2、如何剪枝 3、剪枝剪哪个位置的叶子结点 二、树模型参数及用法 1、参数种类 2、参数解释 1)criterion:gini or entropy 2)splitter:best or random 3&#xff0…

【解析几何笔记】6.三阶行列式

6. 三阶行列式 6.1 三阶行列式的定义 对三阶方阵 ( a 1 a 2 a 3 b 1 b 2 b 3 c 1 c 2 c 3 ) \begin{pmatrix} a_{1} & a_{2} & a_{3}\\ b_{1} & b_{2} & b_{3}\\ c_{1} & c_{2} &c_{3} \end{pmatrix} ​a1​b1​c1​​a2​b2​c2​​a3​b3​c3​​ …

案例分享—国外金融软件界面设计

国外金融软件界面设计追求简洁,旨在减少用户认知负担,通过直观布局与清晰信息架构,提升操作效率与用户体验 其简洁性还源于对金融数据精准呈现的重视,避免冗余元素干扰,确保用户快速获取关键信息,做出明智决…

《机器学习》周志华-CH2(模型评估与选择)

2.1经验误差与过拟合 2.1.1典型的机器学习过程 2.1.2误差 当有 m m m个样本,其中 a a a个分类错误,则错误率为 E a / m Ea/m Ea/m;相应地, 1 − a / m 1-a/m 1−a/m称为精度。 2.1.3过拟合与欠拟合 过拟合:学习能力…

【LeetCode每日一题】——1046.最后一块石头的重量

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 优先队列 二【题目难度】 简单 三【题目编号】 1046.最后一块石头的重量 四【题目描述】 有…

蓝队技能-应急响应篇钓鱼攻击邮件与文件EML还原蠕虫分析线索定性

知识点: 1、应急响应-钓鱼邮件-定性&排查 2、应急响应-恶意文件-应急&分析一、演示案例-蓝队技能-钓鱼攻击-邮件&附件&分析&排查 如何分析邮件安全性: 1、看发信人地址 2、看发信内容信息 3、看发信内容附件 4、看邮件原文源码…

31套科技风PPT模版免费下载

目录 资源名称:31套科技风PPT模板合集资源简介:部分展示:适用人群:资源内容:使用指南:资源下载链接(免费,已设置0个积分下载) 资源名称:31套科技风PPT模板合集…

【人工智能】Transformers之Pipeline(十二):零样本物体检测(zero-shot-object-detection)

目录 一、引言 二、零样本物体检测(zero-shot-object-detection) 2.1 概述 2.2 技术原理 2.3 应用场景 2.4.1 pipeline对象实例化参数 2.4.2 pipeline对象使用参数 2.4 pipeline实战 2.5 模型排名 三、总结 一、引言 pipeline(管…

动态规划之买卖股票篇-代码随想录算法训练营第三十八天| 买卖股票的最佳时机ⅠⅡⅢⅣ,309.最佳买卖股票时机含冷冻期,714.买卖股票的最佳时机含手续费

121. 买卖股票的最佳时机 题目链接:. - 力扣(LeetCode) 讲解视频: 动态规划之 LeetCode:121.买卖股票的最佳时机1 题目描述: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定…

u盘加密工具哪款U盘加密工具好?6款U盘加密工具分享

数据泄露和非法拷贝成为企业面临的严峻挑战。为了保护敏感数据不被非法复制和传播,市场上涌现出了众多U盘加密工具。 本文将为您介绍六款功能强大、备受好评的U盘加密工具,帮助您选择最适合自己需求的加密解决方案。 1.安企神 它支持Windows、macOS和L…

学习大数据DAY43 Sqoop 安装,配置环境和使用

目录 sqoop 安装 配置 mysql sqoop 安装 sqoop 指令集 sqoop 使用 sqoop 创建 hive 表 sqoop 全量导入表 sqoop 增量导入表 sqoop 全量导出表 sqoop 分区表导入表 sqoop 分区表导出表 上机练习 sqoop 安装 配置 mysql create database test DEFAULT CHARACTER S…

汇编语言:adc指令 和 sbb指令

一. abc 指令 adc (add carry)是带向假想的更高位进位加法指令,它利用了标志寄存器上 CF 标志位记录的进位值。 指令格式:adc 操作对象1, 操作对象2 功能:操作对象1 操作对象1 操作对象2 CF 比如,指令…

Vue2升级Vue3填坑笔记

背景 前段时间使用Vue2完成一个流量回放的前端开发,实现了流量回放的基本功能。开发过程中,发现现主流的插件都在适配Vue3,奈何为了赶进度,只能先用自己熟悉的Vue2先顶上。恰巧最近有些许空余时间,就把项目代码逐步变…

基于单片机的人体健康监测系统的设计

本设计以STM32F103C8T6单片机作为主控,通过MAX30102采集心率、血氧值,通过MSP20血压采集模块检测血压值,通过MLX90614红外体温采集模块检测体温值。OLED屏可以显示以上检测的信息,并可以通过蓝牙模块将信息发送给手机APP。当检测值…

【QAMISRA】解决永久license文件替换后未生效的问题

【更多软件使用问题请点击亿道电子官方网站】 1、 文档目标 解决浮动版永久license文件替换后未生效的问题。 2、 问题场景 客户替换永久版license文件且重启lserv服务后,license信息还是原来临时license的信息。 3、软硬件环境 1、软件版本: QA-MIS…

Android车载蓝牙音乐实例(附Demo源码):实现手机播放音乐后车机应用显示音乐名称,歌手,专辑名。且可控制上一曲下一曲,暂停播放功能

一、功能需求 功能需求是在Android10以上设备上实现蓝牙音乐功能,细分为两个功能点: 1、手机和车载设备实现蓝牙连接 (本Demo文只做监听蓝牙连接状态,需手动到设置中连接蓝牙) 2、连接蓝牙成功后手机播放音乐时车载…

【python报错已解决】“IndexError: list index out of range”

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引言 你是否在处理Python列表时遇到了“IndexError: list index out of range”的错误?这个错误可能会让你的程序中…

51单片机最快能生成多高频率的方波?

前言 在嵌入式系统开发中,51 单片机作为一种非常非常非常经典,贯穿上下几十年的微控制器,被广泛应用于各种电子项目中。其中,生成特定频率的方波信号是一项常见的需求。 那么,51 单片机究竟能以多快的速度生成方波呢&…

STM32——GPS模块(GY-NEO-6M)

1连接 1-1 使用 USB-TTL 工具,安装好驱动,可以在”设备管理器看到对应COM”按照如下链接测试模块: USB-TTL GPS 模块 3.3V--------------------------------->VCC GND------------------------------>GND RXD--------------------…

应用程自定义协议与序列化反序列化

本篇将主要介绍在应用层中自定义的协议,自定义协议的同时还需要将我们的数据继续序列化和反序列化,所以本篇的重点为序列化、反序列化的原因以及如何自定义协议,接着探讨了关于为什么 tcp 协议可以支持全双工协议。还根据用户自定义协议结合 …