配置文件的读取 | 青训营大项目笔记

98 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 13 天

场景

在项目开发过程中,像数据库信息、服务器地址、JWT加密等这些固定的信息都会写在配置文件中,而配置文件又有多种表现形式和格式,有 JSON, TOML, YAML各种格式,而且测试环境,开发环境和生产环境用的配置文件也不是同一份。

因此,在此次青训营大项目中,我们引入了 viper 对配置文件进行了读取。下面是对 viper 的介绍。

什么是 viper

viper是一个配置管理的解决方案,它能够从 json,toml,ini,yaml,hcl,env 等多种格式文件中,读取配置内容,它还能从一些远程配置中心读取配置文件,如consul,etcd等;它还能够监听文件的内容变化。

为什么要使用Viper

在构建应用程序时,不必担心配置文件格式。当程序部署在不同位置时,不同的主机可以使用不同的配置文件,而不需要在程序中频繁的修改。

viper 的使用

读取配置文件的优先顺序,从高到低,如下:

  • 显式设置的Set函数
  • 命令行参数
  • 环境变量
  • 配置文件
  • 远程k-v 存储系统,如consul,etcd等
  • 默认值

读取配置文件要求:最少要知道从哪个位置查找配置文件。用户一定要设置这个路径。

viper可以从多个路径搜索配置文件,单个viper实例只支持单个配置文件。 viper本身没有设置默认的搜索路径,需要用户自己设置默认路径。

使用 go get -u github.com/spf13/viper 进行安装

项目中的使用

在此次项目中,仅仅使用了viper对配置文件的读取,在程序启动时调用该方法时读取

func InitViper(path string) *viper.Viper {
   v := viper.New()
   v.SetConfigFile(path)
   v.SetConfigType("yaml")
   if err := v.ReadInConfig(); err != nil {
      fmt.Printf("Fatal error config file: %v\n", err)
      panic(err)
   }
   if err := v.Unmarshal(&global.CONFIG); err != nil {
      fmt.Printf("Fatal error unmarshal: %v\n", err)
      panic(err)
   }
   return v
}