go配置管理框架viper常用操作

 更新时间:2025年04月27日 08:56:39   作者:Wenhao.  
这篇文章主要介绍了go配置管理框架viper常用操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

官网地址:

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) // 打印反序列化后的结构体

到此这篇关于go配置管理框架viper的文章就介绍到这了,更多相关go配置管理viper内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在golang中使用cel的用法详解

    在golang中使用cel的用法详解

    CEL 是一种非图灵完备的表达式语言 ,旨在快速、可移植且执行安全,CEL 可以单独使用,也可以嵌入到其他的产品中,本文将给大家介绍一下golang中如何使用cel,需要的朋友可以参考下
    2023-11-11
  • GO中什么情况会使用变量逃逸

    GO中什么情况会使用变量逃逸

    本文主要介绍了GO中什么情况会使用变量逃逸,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Go语言中的变量声明和赋值

    Go语言中的变量声明和赋值

    这篇文章主要介绍了Go语言中的变量声明和赋值的方法,十分的细致全面,有需要的小伙伴可以参考下。
    2015-04-04
  • Go事务中止时是否真的结束事务解析

    Go事务中止时是否真的结束事务解析

    这篇文章主要为大家介绍了Go事务中止时是否真的结束事务实例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Go1.21新增cmp包的用法详解

    Go1.21新增cmp包的用法详解

    Go 1.21新增的 cmp 包提供了与比较有序值相关的类型和函数,前几篇文章讲解的 slices 包中的函数有大量使用到 cmp 包中的函数和类型,下面我们就来看看cmp包的相关函数用法吧
    2023-08-08
  • Go语言实现常用排序算法的示例代码

    Go语言实现常用排序算法的示例代码

    排序算法是在生活中随处可见,也是算法基础,因为其实现代码较短,应用较常见。所以在面试中经常会问到排序算法及其相关的问题。本文为大家整理了一些Go语言中常用排序算法的实现,需要的可以参考一下
    2022-08-08
  • golang并发编程使用Select语句的实现

    golang并发编程使用Select语句的实现

    Go语言中的select语句是并发编程中的重要工具,允许Goroutine等待多个通道操作,它阻塞直至任一case可执行,可用于接收数据、实现超时机制和非阻塞通道操作,感兴趣的可以了解一下
    2024-10-10
  • go 下载非标准库包(部份包被墙了)到本地使用的方法

    go 下载非标准库包(部份包被墙了)到本地使用的方法

    今天小编就为大家分享一篇go 下载非标准库包(部份包被墙了)到本地使用的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Go语言中的switch用法实例分析

    Go语言中的switch用法实例分析

    这篇文章主要介绍了Go语言中的switch用法,实例分析了switch的功能及使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • Golang中间件设计示例详解

    Golang中间件设计示例详解

    这篇文章主要介绍了Golang中间件设计示例,中间件是在HTTP请求处理过程中,对请求进行处理的一种模式,中间件可以在请求到达处理器之前或之后对请求进行拦截,修改或者增强,同时可以对响应进行处理,需要的朋友可以参考下
    2023-05-05

最新评论