• viper读取配置文件


    hello,大家好,我是聪聪。


    1. 介绍

    Viper是适用于Go应用程序的完整配置解决方案。它被设计用于在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持以下特性:

    • 设置默认值
    • JSONTOMLYAMLHCLenvfileJava properties格式的配置文件读取配置信息
    • 实时监控和重新读取配置文件(可选)
    • 从环境变量中读取
    • 从远程配置系统(etcd或Consul)读取并监控配置变化
    • 从命令行参数读取配置
    • 从buffer读取配置
    • 显式配置值

    Viper能够帮助我们执行以下操作:

    • 查找、加载和反序列化JSONTOMLYAMLHCLINIenvfileJava properties格式的配置文件。

    • 提供一种机制为你的不同配置选项设置默认值,进行灵活配置和发布配置。

    • 提供一种机制来通过命令行参数覆盖指定选项的值。

    • 提供别名系统,以便在不破坏现有代码的情况下轻松重命名参数。

    • 当用户提供了与默认值相同的命令行或配置文件时,可以很容易地分辨出它们之间的区别。

    Viper能够按照下列优先级进行获取配置:

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

    2. 安装

    go get github.com/spf13/viper
    

    3. Viper使用介绍

    3.1 设置默认值

    Viper支持设置默认值,当我们无法从配置文件、环境变量、远程配置、命令行获取配置时,默认配置到是很有用的。

    func main() {
       
      //设置各类key对应默认值
      //key 为string类型
      //value可接受interface{} 类型参数
    	viper.SetDefault("rootPath", "rootPath default value")
    	viper.SetDefault("defaultPort", 8000)
    	viper.SetDefault("defaultConfig", map[string]string{
       
    		"HttpMethod": "HttpMethod default value",
    		"HttpUrl":    "HttpUrl default value",
    	})
      //从viper中读取配置
    
    	fmt.Println("rootPath value:", viper.Get("rootPath"))
    	fmt.Println("defaultPort value:", viper.Get("defaultPort"))
    	fmt.Println("defaultConfig:", viper.Get("defaultConfig"))
    	fmt.Println("defaultConfig:", viper.GetStringMapString("defaultConfig"))
    }
    

    从Viper中读取配置key对应配置信息。打印信息如下:

    rootPath value: rootPath default value
    defaultPort value: 8000
    defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]
    defaultConfig: map[httpMethod:GET httpUrl:ccoder.cc]
    

    3.2 读取配置文件

    Viper读取配置文件时,需要指定告诉配置文件路径(或者读取配置方式)。同时Viper支持从JSONTOMLYAMLHCLenvfileJava properties格式的配置文件读取配置信息。同时支持搜索多个路径。

    下面是一个从配置文件config.json 读取配置的案例。只用指定配置文件config预期出现的路径,无需指定特定的路径。

    //在当前工作目录 . 中读取一个config的配置文件 未指定文件后缀.
    func printFile() {
       
      //配置文件名称(无后缀扩展名),viper会自行解析文件后缀名.
      //若配置文件无后缀时则需要通过SetConfigType配置后水名
      viper.SetConfigName("config")
      //可以重复添加的搜索路径
    	viper.AddConfigPath(".")
    
      //加载配置文件 捕获一下error:文件不存在情况。
    	err := viper.ReadInConfig()
    	if err != nil {
       
    		if _, ok := err.(viper.ConfigFileNotFoundError); ok {
       
    			log.Println("config not exists")
    		} else {
       
    			log.Println("read config error")
    		}
    		log.Fatal
  • 相关阅读:
    隐私计算从AI到BI:隐语SCQL数据分析引擎上线
    事务-Java Spring
    MyBatis——Plus基本的CRUD
    大数据毕业设计选题推荐-生产大数据平台-Hadoop-Spark-Hive
    Android 包体积优化(未完成)
    面试必问的8个CSS响应式单位,你知道几个?
    逆傅里叶变IFFT原始信号恢复方法研究-附Matlab代码
    如何使用grpc从服务端像向客户端传递错误信息
    微信扫码登陆流程
    A_Machine_Vision_Apparatus_and_Method_for_Can-End_Inspection-论文阅读笔记
  • 原文地址:https://blog.csdn.net/chencong3139/article/details/127068209