go配置管理框架——viper

Golang REST API开发实战:从环境搭建到部署的全流程指南 REST API是现代Web开发的核心技术架构,基于HTTP协议实现资源的增删改查操作。其工作原理是通过标准HTTP方法(GET、POST、PUT、DELETE)对资源进行统一接口访问,具有无状态、可缓存等特性。在技术价值方面,REST API支持前后端分离开发,便于微服务架构实施,特别适合构建高性能的后端服务。应用场景广泛覆盖Web应用、移动端后台、微服务通信等领域。本文以Golang为核心开发语言,结合Gin框架和GORM等热门技术栈,详细讲解如何构建完整的REST API服务。教程重点涵盖Gorout 阅读详情

官网地址:

GitHub - spf13/viper: Go configuration with fangs

常用操作:

Viper会按照下面的优先级。每个项目的优先级都高于它下面的项目:

  • 显示调用Set设置值
  • 命令行参数(flag)
  • 环境变量
  • 配置文件
  • key/value存储
  • 默认值

配置文件 config.yaml(当前目录下)

host: "0.0.0.0"

mysql:
  host: "127.0.0.1"
  port: 3306

cache:
  cache1:
    max-items: 100
    item-size: 64
  cache2:
    max-items: 200
    item-size: 80

配置

	viper.SetDefault("redis.port", "localhost:6379")
	// viper.SetConfigFile("./config.yaml") // 配置文件路径,此行和下面两行效果相同
	viper.SetConfigName("config") // 配置文件名
	viper.SetConfigType("yaml")   // 配置文件类型
	viper.AddConfigPath("./")     // 配置文件路径
	err := viper.ReadInConfig()   // 查找并读取配置文件
	if err != nil {
		panic(fmt.Errorf("fatal error config file: %w", err)) // 处理错误
	}

从Viper获取值

在Viper中,有几种方法可以根据值的类型获取值。存在以下功能和方法:

  • Get(key string) : interface{}
  • GetBool(key string) : bool
  • GetFloat64(key string) : float64
  • GetInt(key string) : int
  • GetIntSlice(key string) : []int
  • GetString(key string) : string
  • GetStringMap(key string) : map[string]interface{}
  • GetStringMapString(key string) : map[string]string
  • GetStringSlice(key string) : []string
  • GetTime(key string) : time.Time
  • GetDuration(key string) : time.Duration
  • IsSet(key string) : bool
  • AllSettings() : map[string]interface{}

通过传入.分隔的路径

	// Viper可以通过传入.分隔的路径来访问嵌套字段:
	mysqlHost := viper.GetString("mysql.host") // 访问mysql的host字段
	fmt.Println("Mysql Host:", mysqlHost)
	mysqlPort := viper.GetInt("mysql.port") // 访问mysql的port字段
	fmt.Println("Mysql Port:", mysqlPort)

提取子树

	// 提取子树
	appConfig := viper.Sub("app")                       // 提取app子树
	fmt.Println("App Config:", appConfig.AllSettings()) // 打印app子树的所有设置
	cache1 := appConfig.GetStringMapString("cache1")    // 提取app子树的cache1字段
	cache2 := viper.Sub("app.cache2")                   // 提取app子树的cache2字段
	fmt.Println("Cache1:", cache1)                      // 打印app子树的cache字段
	fmt.Println("Cache2:", cache2.AllSettings())        // 打印app子树的cache2字段的所有设置

反序列化

	// 反序列化
	var conf Config
	err = viper.Unmarshal(&conf) // 反序列化到结构体
	if err != nil {
		panic(fmt.Errorf("unable to decode into struct, %v", err)) // 处理错误
	}
	fmt.Println("Config Struct:", conf) // 打印反序列化后的结构体
Golang Cobra 与 Viper 整合:配置管理最佳方案 当我们开发一个CLI工具(比如类似kubectl命令行参数(用户直接输入)、环境变量(系统或容器注入)、配置文件(长期存储的默认值)。如何让这三者协同工作,同时避免代码冗余?Cobra+Viper的组合正是解决这一问题的“最佳拍档”。Cobra与Viper的核心能力拆解配置优先级规则(命令行 > 环境变量 > 配置文件 > 默认值)实战:从0到1开发一个支持多源配置的CLI工具常见问题(如配置热更新、冲突解决)本文将从“生活场景”切入,用“开奶茶店”的故事类比配置管理问题; 阅读详情

相关推荐

Go语言实战 : API服务器 (2) 运行流程

API服务器流程 API服务器的启动流程 API服务器对于HTTP请求的处理流程 API服务器启动流程 解析配置文件 初始化logger 建立数据库连接 设置http连接(设置 Header,注册路由,注册中间件) HTTP 请求处理流程 建立连接 客户端发送 HTTP 请求后,服务器会根据域名进行域名解析,就是将网站名称转变成 IP 地址。之后通过发起 TCP 的三次握手建立连接,然后发送http请求 接收请求 API 服务器,在接收到请求之后,首先根据 HTTP 请求行的信息来解析到 H

weixin_44560620的博客 539

【Go常用库】viper 配置管理

这遵循上面建立的优先规则;对路径的搜索将级联通过剩余的配置注册表,直到找到为止。例如,给定此配置文件,可以选择将所有或特定的值解析到结构体、map等。访问器方法也接受深度嵌套键的格式化路径。例如,如果加载下面的JSON文件。Viper 可以通过使用路径中的数字来访问数组索引。是在默认值中定义的,Viper 也会找到它。变得未定义,它们被更高优先级的配置级别“隐藏”。如果存在与分隔键路径匹配的键,则将返回其值。已定义(并且可能被覆盖)。被立即值覆盖(通过标志、环境变量、Viper可以通过传入。

qq_46063517的博客 3409

[Golang] Viper原理以及详细使用案例

介绍:用于处理配置文件中解析和读取配置文件优点:支持多种配置格式,json,yaml 等等作用:配置文件解析和读取 默认值支持 环境变量支持 命令行标志支持 配置监听和热加载。

Jing_Hua 3525

Go项目配置管理工具---Viper

命令行参数环境变量配置文件显然,对于Go项目而言,单个去读取命令行、环境变量、配置文件并不难,但一个个读取却是很麻烦,有没有一个第三方库可以帮我们一次性读取上面几种数据源的配置呢?有的,就是使用 viper 库,viper支持读取不同数据源和不同格式的配置文件,是Go项目读取配置的神器。

氷的博客 3886

Go 学习笔记(82)— Go 第三方库之 viper(解析配置文件、热更新配置文件)

1. viper 特点 viper 是一个完整的 Go应用程序的配置解决方案,它被设计为在应用程序中工作,并能处理所有类型的配置需求和格式。支持特性功能如下: 设置默认值 读取 JSON、TOML、YAML、HCL、envfile和 Java属性的配置文件 监控配置文件改动,并热加载配置文件 从环境变量中读取 从远程配置中心读取配置(etcd/consul),并监控变动 从命令行标志中读取 从缓冲区读取 支持直接设置配置项的值 viper读取配置文件的优先级顺序: viper.Set() 所设置的值

wohu1104的专栏 3481

优雅地编写每日 Golang 库

以上是我个人推荐的一些每日 Golang 库。当然,Golang 生态系统中还有许多其他优秀的库可供选择,根据你的具体需求选择适合的库是非常重要的。在这篇文章中,我将介绍一些我个人认为每日 Golang 开发中必备的库,并提供相应的源代码示例。Gin 是一个快速而简单的 HTTP web 框架,它具有出色的性能和易于使用的 API。Viper 是一个灵活的配置管理库,它支持多种配置格式,并提供了简单易用的 API。Zap 是一个高性能的日志库,它提供了丰富的功能和灵活的配置选项。

syntax_bug609的博客 91

9. Go语言配置管理神器Viper的基本使用

Viper将读取从Key/Value存储(例如etcd或Consul)中的路径检索到的配置字符串(如JSON、TOML、YAML、HCL、envfile和Java properties格式)。需要重新启动服务器以使配置生效的日子已经一去不复返了,viper驱动的应用程序可以在运行时读取配置文件的更新,而不会错过任何消息。默认情况下,空环境变量被认为是未设置的,并将返回到下一个配置源。Viper使用crypt从K/V存储中检索配置,这意味着如果你有正确的gpg密匙,你可以将配置值加密存储并自动解密。

YouMing_Li的博客 2576

vCenter Server出现no healthy upstream的解决方法

可以通过"VMware vCenter Server Management(服务)"来排查问题,在网页里面找到“服务”模块,会发现有很多服务没有启动起来,而且手动启动也无法启动。7.0 地址后,页面出现“no healthy upstream”,无法正常登录vCenter,重启后依旧如此,该故障的前提是没有对vCenter做过任何配置,如下图所示。于是用命令查询是否有证书过期,发现真有多个服务依赖的证书在当天早上过期。使用如下命令尝试打开服务发现不分服务可以打开,不分服务无法打开。

1万+

Cookiecutter-Golang:打造生产级Go项目的终极模板,5分钟快速启动开发

🚀 **Cookiecutter-Golang** 是一个专为Go开发者设计的强大项目模板工具,它能够帮助你在短短5分钟内快速启动一个生产级别的Go项目。无论你是Go新手还是经验丰富的开发者,这个模板都能为你节省大量配置时间,让你专注于核心业务逻辑的开发。 ## 什么是Cookiecutter-Golang? Cookiecutter-Golang是一个基于[Cookiecutter](ht

gitblog_00995的博客 1021

Docker拉取ubuntu22.04镜像使用ROS2 humble及仿真工具可视化进行导航

Docker中安装Ubun22以及ROS,gazebo可视化等

lovebc的博客 1676

wsl2内核版本和模块版本不一致解决方法

** /lib/modules/…build: No such file or directory错误解决办法这篇文章历时1个月整,从4月5日一直到5月5日,这一问题才得以解决。

m0_60634555的博客 5103

Golang Gin框架搭建小蓝书后端项目实践

典型的Golang项目应包含:/etc存放配置文件,/internal作为主要代码区(含conf配置映射、initialize初始化逻辑、web路由控制等),/pkg公共包,以及入口文件main.go。将路由处理函数放在/internal/web/controller,路由注册逻辑集中在/internal/web/router.go,这样main函数只需调用RegisterRouters,保持入口简洁。它内置Golang环境,能一键生成标准项目结构,省去手动创建文件的繁琐。项目演进过程中要注意依赖管理。

ThunderstormFalcon78的博客 446

手把手教你用Arduino IDE玩转ESP32-S3-wroom(附串口调试技巧)

本文详细介绍了如何在Arduino IDE环境下配置和使用ESP32-S3-WROOM模块,包括开发环境搭建、硬件连接、程序烧录及高级调试技巧。通过实战步骤和常见问题解决方案,帮助开发者快速上手这一高性能Wi-Fi/蓝牙双模模组,提升物联网开发效率。

weixin_30487201的博客 292

学习 Golang 开发,需要掌握这几个开源框架

最近在学 Golang(Go语言),也在 Github 上找了一些基于 Golang 的优秀开源框架,在这里分享给大家。

... 1万+

QCustomPlot实战:从入门到精通的数据可视化

本文详细介绍了如何使用QCustomPlot进行数据可视化,从基础环境搭建到高级图表定制,涵盖实时监控、多坐标系联动等实战技巧。基于Qt的QCustomPlot库以其强大的绘图能力和灵活的API,帮助开发者快速实现专业级数据可视化效果。

weixin_29003437的博客 115

uniapp(全端兼容) - 最新详细实现瀑布流列表及布局设计,uni-app全平台兼容的瀑布流示例,view容器自适应瀑布流布局,图片瀑布流布局、图像+文字卡片式瀑布流,类似小红书(详细示例代码)

uni-app,瀑布流,安卓app,苹果app,微信小程序,移动端,H5网页,手机网站,微信小程序、支付宝小程序,手机app端,nvue,瀑布流布局,如何实现图片瀑布流,怎么做文字+图像瀑布流,uniapp仿小红书笔记瀑布流效果,uniAPP仿快手抖音布局列表,瀑布流列表详细教程,编译所有平台都能用的瀑布流列表,商品瀑布流列表,图文列表,小程序瀑布流,页面触底懒加载,瀑布流插件,详细示例代码教程,uni-app H5实现瀑布流效果,uniapp小程序做瀑布流,纯css瀑布流,用uniapp写瀑布流商品列表,

✅ 精选推荐文章 1万+

Cookiecutter-Golang可选集成详解:Viper配置、Cobra命令行与Logrus日志

想要快速启动一个生产就绪的Go项目吗?Cookiecutter-Golang为你提供了一套完整的解决方案!🚀 这个基于Cookiecutter的Go项目模板框架,让开发者能够通过简单的交互式问答,快速生成具备专业级架构的Go应用程序。其中最强大的功能之一就是它的可选集成系统,特别是Viper配置管理、Cobra命令行工具和Logrus日志系统的无缝集成。 ## 为什么选择Cookiecutte

gitblog_01019的博客 392

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

算法大师! 720

Go 语言web 框架 Gin 练习8

目录 文章目录1 介绍2 练习友情援助 1 介绍 Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点 对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错 借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范. 2 练习 本次练习继续对之前的代码进行改善,主要工作是 通过VIPER读取配置提高,配置更改效率。 配置文件里的相应内容。 server:

去向前方的博客 943

RH850从0搭建Autosar开发环境系列讲解 - 总目录

Davinci Autosar实战开发从0构建开发能力。OS,COM,DCM,BSWMM,ECUM,VLINK,XCP,MEMMAP等模块配置,带你熟悉运行的autosar代码,包括MICROSAR的启动运行,使用GreenHills生成运行的hex。

weixin_42412049的博客 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Golang生态系统深度探索:流行库和框架使用指南

Golang作为一门高效、简洁的编程语言,拥有丰富的生态系统,其流行库和框架为开发者提供了强大的工具支持。本文将带您全面了解Golang生态系统中常用的库和框架,助您快速掌握它们的使用方法,提升开发效率。 ## 一、Web框架:构建高效Web应用的基石 在Golang的Web开发领域,有几款备受欢迎的框架,它们各具特色,能满足不同项目的需求。 ### 1.1 Echo:轻量级高性能框架 E

gitblog_00534的博客 812

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

golang开发好用的github工具

web框架 github.com/gin-gonic/gin github.com/zeromicro/go-zero github.com/fvbock/endless 永不停止框架,可以接受系统信息,进行自己重启 Rest协议客户端 github.com/go-resty/resty 依赖注入 github.com/google/wire 支持注入方法和接口对象 参考文档:Golang依赖注入框架...

yunduan16的博客 8788

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

golang优秀的第三方库mysql_golang比较优秀的第三方库收集-Go语言中文社区

golang有许多优秀的第三方库,有时要使用时忘记库名又要去github找半天,还是写下来做个笔记并且逐步添加。以下的库基本都实际使用过。logstar最多的log项目,我现在基本都使用这个项目,因为写法跟官方兼容很方便。但是logrus没有日志文件自动切割功能,找了半天找到这个:也有人把beego的部分代码抽出来做成rotate。不过上面的file-rotatelogs应该可以满足需求了。号称最...

weixin_39843151的博客 839

【golang自学之路(三)】go-web快速开发脚手架搭建

golang做web开发搭建快速脚手架:1.采用gin框架+gorm框架负责resful+mysql2.缓存采用go-redis3.日志选择zap4.配置采用vipergolang web脚手架项目采用CLD分层理念Controller:服务的入口,负责处理路由、参数校验、请求转发。:逻辑(服务)层,负责处理业务逻辑。**DAO/Repository:**负责数据与存储相关功能。区别于java框架常用的MVC框架,CLD更好的杜绝了Model层在处理业务逻辑时的臃肿。

qq_42961251的博客 2674

Go 语言 cobra + viper 命令行应用与配置管理深度解析

cobra = 命令树 + 生命周期钩子 + 自动补全,是 Go CLI 的事实标准框架,Kubernetes/etcd/Prometheus 同款;viper = 五层优先级配置(Set > flag > env > 文件 > 默认值),配合 Unmarshal 到结构体使用才是工程正解;Changed 是判断 flag 是否设置的唯一可靠手段,默认值判断是最高频错误;配置校验与热更新(config validate + WatchConfig)是运维友好性的分水岭;

ITOfDragon的博客 666

Viper进行后端代码配置

当在Go语言中使用Viper框架进行配置管理时,Viper提供了强大且灵活的功能来读取、解析和管理应用程序的配置信息。Viper支持多种配置文件格式:JSON、TOML、YAML、YML、properties、props、prop、HCL、tfvars、dotenv、env、ini等。多种配置来源:可以从文件、环境变量、命令行参数、io.Reader、远程配置中心(如etcd、Consul、firestore等)读取和修改配置。实时监听:可以监听配置文件的变化,并自动重新加载应用到程序中。

Messi__的博客 1700
上一篇: 蓝桥杯 剪纸刀
下一篇: Typora 插入行内公式
Wenhao.
博客等级 码龄4年 77粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值