golang读取配置文件

一、读取yml配置文件

方法一、通过yaml.v2读取配置文件数据,需要导入yaml.v2的包

go get gopkg.in/yaml.v2

1、首先在config文件夹下定义配置文件config.yml,内容如图:

  • app模块,下面包含两个字段host,port
  • log模块:下面包含一个字段maxSize
  • server模块:只有一个值mysql

2、在config文件夹中定义配置文件对应的结构体,如图:

  • App字段:类型为configapp,也是一个结构体,内嵌进来
  • Log字段:类型为configlog,也是一个结构体,内嵌进来
  • Server字段:类型为string,对应的是配置文件中的server

注:为什么要通过configapp和configlog内嵌进来,因为配置文件中的app和log为多层级的,不像server就是单纯的键值,因此需要通过结构体的方式将app和log映射为对应结构体然后内嵌入Config结构体中,Config结构体标签中的app、log、server刚好对应配置文件中的三个层级,必须要写,否则反序列化没数据

4、在config外层创建文件peizhi.go,内容如下:

5、运行结果如下:

方法二、使用Viper读取配置文件文件

Viper可以处理多种格式的配置,目前已支持从JSON、TOML、YAML、HCL、INI和Java properties文件中读取配置数据,Viper还能监视配置文件的变动、重新读取配置文件。在项目中可以用作热加载

go get github.com/spf13/viper

1、在上面例子基础上,其余不用动,修改peizhi.go文件,内容如下:

运行结果如下:

附加:

上面例子读取的都是单个配置,如果要读取数据为一个切片,此时应该怎么办呢?

1、下面例子表示读取yaml中的配置文件到一个数组中,首先查看配置文件写法,如图:

2、读取配置文件的config.go文件内容如下:

注:结构体字段名首字母要大写,否则反序列化不成功,结构体名字如果不需要导出那就不用大写

3、定义主文件来调用读取配置文件,如图:

运行结果如下:

标签