Skip to content

Latest commit

 

History

History
95 lines (66 loc) · 1.92 KB

0.1.md

File metadata and controls

95 lines (66 loc) · 1.92 KB

project-readme

遇到的问题和需要避免的一些错误的认知,提高自己的能力,我们在路上!

viper的使用

package viper

import (
	"os"
	"path"
	"strings"

	"github.com/spf13/cast"
	"github.com/spf13/viper"
	"github.com/sunmi-OS/gocore/utils"
)

var C *viper.Viper

// 初始化配置文件
// filePath 配置文件路径
// fileName 配置文件名称(不需要文件后缀)
func NewConfig(filePath string, fileName string) {

	C = viper.New()
	C.WatchConfig()
	C.SetConfigName(fileName)
	//filePath支持相对路径和绝对路径 etc:"/a/b" "b" "./b"
	if (filePath[:1] != "/") {
		C.AddConfigPath(path.Join(utils.GetPath(), filePath))
	} else {
		C.AddConfigPath(filePath)
	}

	// 找到并读取配置文件并且 处理错误读取配置文件
	if err := C.ReadInConfig(); err != nil {
		panic(err)
	}

}


// 获取配置文件优先获取环境变量(返回string类型)
func GetEnvConfig(key string) string {

	// 转大写 . 转 _ 获取环境变量判断是否存在(存在直接返回,不存在使用viper配置)
	env := os.Getenv(strings.Replace(strings.ToUpper(key), ".", "_", -1))
	if env != "" {
		return env
	}

	return C.GetString(key)
}

// 获取配置文件优先获取环境变量(返回int类型)
func GetEnvConfigInt(key string) int64 {

	env := os.Getenv(strings.Replace(strings.ToUpper(key), ".", "_", -1))
	if env != "" {
		return cast.ToInt64(env)
	}

	return C.GetInt64(key)
}

// 获取配置文件优先获取环境变量(返回Float类型)
func GetEnvConfigFloat(key string) float64 {

	env := os.Getenv(strings.Replace(strings.ToUpper(key), ".", "_", -1))
	if env != "" {
		return cast.ToFloat64(env)
	}

	return C.GetFloat64(key)
}

// 获取配置文件优先获取环境变量(返回Bool类型)
func GetEnvConfigBool(key string) bool {

	env := os.Getenv(strings.Replace(strings.ToUpper(key), ".", "_", -1))
	if env != "" {
		return cast.ToBool(env)
	}

	return C.GetBool(key)
}