2、viper

viper 是一个配置解决方案,拥有丰富的特性:

安装

go get -u github.com/spf13/viper

使用

// 创建实例
config := viper.New()
// 设置配置文件类型
config.SetConfigType("ini")

// 从本地文件读取
// 文件名
config.SetConfigName("mysql")
// 文件所在路径
config.AddConfigPath("./config/")
// 解析文件
err := config.ReadInConfig()

// 从Reader读取
config.ReadConfig(in io.Reader)
// 读取字符串
config.ReadConfig(strings.NewReader(confStr))

// 合并多个配置
config.MergeConfig(strings.NewReader(confStr1))

ini

[mysql]
host=localhost
username=root
password=123456
connect=fasle
package main

import (
	"fmt"
	"github.com/spf13/viper"
)

func main() {
	config := viper.New()
	// 文件类型
	config.SetConfigType("ini")
	// 文件名
	config.SetConfigName("mysql")
	// 文件所在路径
	config.AddConfigPath("./config/")
	err := config.ReadInConfig()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(config.Get("mysql.host"))
	fmt.Println(config.Get("mysql.username"))
	fmt.Println(config.Get("mysql.password"))
	fmt.Println(config.GetBool("mysql.connect"))
}

yaml

mysql:
  host: localhost
  username: root
  password: 123456
  connect: false
package main

import (
	"fmt"
	"github.com/spf13/viper"
)

func main() {
	config := viper.New()
	// 文件类型
	config.SetConfigType("yml")
	// 文件名
	config.SetConfigName("mysql")
	// 文件所在路径
	config.AddConfigPath("./config/")
	err := config.ReadInConfig()
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println(config.Get("mysql.host"))
	fmt.Println(config.Get("mysql.username"))
	fmt.Println(config.Get("mysql.password"))
	fmt.Println(config.GetBool("mysql.connect"))
}