增加 cli / env / file 配置解析
This commit is contained in:
34
init.go
34
init.go
@ -9,7 +9,10 @@ package config
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"git.zhangdeman.cn/zhangdeman/serialize"
|
||||
envParse "github.com/caarlos0/env/v9"
|
||||
"github.com/jessevdk/go-flags"
|
||||
"github.com/joho/godotenv"
|
||||
"reflect"
|
||||
)
|
||||
|
||||
@ -18,16 +21,43 @@ import (
|
||||
// Author : go_developer@163.com<白茶清欢>
|
||||
//
|
||||
// Date : 16:25 2024/11/5
|
||||
func Init(configReceiver any) error {
|
||||
//
|
||||
// 参数:
|
||||
// - configReceiver 接收参数结果的指针
|
||||
// - envFileList 环境变量文件路径, 可以指定多个环境变量文件, 不指定默认加载服务运行目录下 .env 文件
|
||||
// - configFile 配置文件路径
|
||||
func Init(configReceiver any, envFileList []string, configFile string) error {
|
||||
var (
|
||||
err error
|
||||
)
|
||||
|
||||
if nil == envFileList {
|
||||
envFileList = make([]string, 0)
|
||||
}
|
||||
|
||||
// 检查结构体指针是否合法
|
||||
if err = checkConfigReceiver(configReceiver); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err = flags.Parse(configReceiver); nil != err {
|
||||
// 加载环境变量
|
||||
if err = godotenv.Load(envFileList...); nil != err {
|
||||
return err
|
||||
}
|
||||
|
||||
// 解析命令行参数
|
||||
cliReceiver := cloneReceiver(configReceiver)
|
||||
if _, err = flags.Parse(cliReceiver); nil != err {
|
||||
return err
|
||||
}
|
||||
// 解析环境变量参数
|
||||
envReceiver := cloneReceiver(configReceiver)
|
||||
if err = envParse.Parse(envReceiver); nil != err {
|
||||
return err
|
||||
}
|
||||
// 解析配置文件参数
|
||||
fileReceiver := cloneReceiver(configReceiver)
|
||||
if err = serialize.File.ReadAnyFileContent(configFile, fileReceiver); nil != err {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
Reference in New Issue
Block a user