目 录CONTENT

文章目录

使用 Viper 包处理配置

Sakura
2023-10-07 / 0 评论 / 0 点赞 / 76 阅读 / 3477 字 / 正在检测是否收录...

一: github 介绍

Viper 是一个完整的 Go 应用程序配置解决方案,包括12-Factor 应用程序。它被设计为在应用程序中工作,并且可以处理所有类型的配置需求和格式。它支持:

https://github.com/spf13/viper

  • 设置默认值

  • 从 JSON、TOML、YAML、HCL、envfile 和 Java 属性配置文件中读取

  • 实时观看和重新读取配置文件(可选)

  • 从环境变量读取

  • 从远程配置系统(etcd 或 Consul)读取,并观察更改

  • 从命令行标志读取

  • 从缓冲区读取

  • 设置显式值

Viper 可以被认为是满足所有应用程序配置需求的注册表。

重要:Viper 配置键不区分大小写。 目前正在讨论将其设为可选。

二: 安装和使用

go get github.com/spf13/viper
# 设置默认值
func SetDefault(key string, value interface{})
# 配置文件名(不需要扩展名)
func SetConfigName(in string)
# 配置类型
func SetConfigType(in string)
# 添加配置文件路径
func AddConfigPath(in string)
# 读取配置
func ReadInConfig() error
# 配置文件未找到错误
viper.ConfigFileNotFoundError

# 获取值
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{}

# key 使用点表示嵌套结构:
GetString("datastore.metric.host")

三: 具体使用

1. 创建 config.yaml

app:
  addr: :9999

2. 配置加载

tool/config.go 或者自己的项目路径的合适位置中加载配置

package tool

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

// LoadConfig 加载配置
func LoadConfig() {
	// 定义默认值:配置文件加载错误使用的值
	setConfigDefault()

	// 配置文件属性设置
	viper.SetConfigName("config") // 后缀可以不需要写,自动识别
	//viper.SetConfigType("yaml")   // 不需要写,自动识别
	viper.AddConfigPath(".") // 由于配置加载是在main.go里的,所以路径是相对main.go

	// 读取配置
	if err := viper.ReadInConfig(); err != nil {
		// 如果需要对配置文件不存在错误,做特殊处理,使用:
		//if _, ok := err.(viper.ConfigFileNotFoundError); ok {
		//	config file not found; ignore error if desired
		//}else{
		//	config file was found but another error was produced
		//}

		log.Fatal(err)
	}

}

// setConfigDefault 设置默认值
func setConfigDefault() {
	// 设置默认值是因为如果配置文件加载失败
	// app.addr
	viper.SetDefault("add.addr", ":8080")
}

3. 使用时机

项目启动的时候加载

// main
func main() {
	// 完成配置加载
	tool.LoadConfig()

	// 初始化Gin引擎
	router := gin.Default()

	// 设置路由
	app.SetRouter(router)

	// 启动监听
	router.Run(viper.GetString("app.addr"))
}

0

评论区