配置初始化 : 规划使用viper完成
This commit is contained in:
50
init.go
50
init.go
@ -9,13 +9,39 @@ package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"git.zhangdeman.cn/zhangdeman/serialize"
|
||||
envParse "github.com/caarlos0/env/v9"
|
||||
"github.com/jessevdk/go-flags"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/spf13/viper"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
// InitByViper 通过viper库初始化配置
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 18:44 2024/11/7
|
||||
//
|
||||
// 配置解析优先级 : 显示的值设置 > 命令行标记 > 环境变量 > 配置文件 > 键值存储 > 默认值
|
||||
//
|
||||
// 参数:
|
||||
// - configReceiver 接收参数结果的指针
|
||||
// - envFileList 环境变量文件路径, 可以指定多个环境变量文件, 不指定默认加载服务运行目录下 .env 文件
|
||||
// - configFilePath 配置文件目录
|
||||
// - configFileNameList 要加载的配置文件列表
|
||||
func InitByViper(configReceiver any, envFileList []string, configFilePath string, configFileNameList []string) error {
|
||||
// 解析配置
|
||||
if err := viper.ReadInConfig(); nil != err {
|
||||
return err
|
||||
}
|
||||
// 获取全部配置,并解析
|
||||
if err := serialize.JSON.Transition(viper.AllSettings(), configReceiver); nil != err {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Init 初始化配置
|
||||
//
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
@ -28,7 +54,8 @@ import (
|
||||
// - configFile 配置文件路径
|
||||
func Init(configReceiver any, envFileList []string, configFile string) error {
|
||||
var (
|
||||
err error
|
||||
err error
|
||||
fileConfigMap = map[string]any{}
|
||||
)
|
||||
|
||||
if nil == envFileList {
|
||||
@ -46,20 +73,23 @@ func Init(configReceiver any, envFileList []string, configFile string) error {
|
||||
}
|
||||
|
||||
// 解析命令行参数
|
||||
cliReceiver := cloneReceiver(configReceiver)
|
||||
if _, err = flags.Parse(cliReceiver); nil != err {
|
||||
if _, err = flags.Parse(configReceiver); nil != err {
|
||||
return err
|
||||
}
|
||||
// 解析环境变量参数
|
||||
envReceiver := cloneReceiver(configReceiver)
|
||||
if err = envParse.Parse(envReceiver); nil != err {
|
||||
|
||||
// 读取配置文件内容
|
||||
if err = serialize.File.ReadAnyFileContent(configFile, &fileConfigMap); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
// 解析配置文件参数
|
||||
fileReceiver := cloneReceiver(configReceiver)
|
||||
if err = serialize.File.ReadAnyFileContent(configFile, fileReceiver); nil != err {
|
||||
return err
|
||||
configTypeReflect := reflect.TypeOf(configReceiver).Elem()
|
||||
configValueReflect := reflect.ValueOf(configReceiver).Elem()
|
||||
configFieldNum := configValueReflect.NumField()
|
||||
for i := 0; i < configFieldNum; i++ {
|
||||
fmt.Println(configTypeReflect.Field(i).Name)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user