diff --git a/define.go b/define.go index d19c82a..e8edd5e 100644 --- a/define.go +++ b/define.go @@ -16,11 +16,11 @@ package config // 默认配置文件路径配置, 配置文件路径及类型也可通过命令行参数指定. 支持属性如下: // - config-type(dct) : 配置文件类型 ini / json / yml / yaml / toml , 默认值:空字符串,会根据传入配置文件后缀自行判断 // - config-path(dcp) : 配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找 -// - parse-sort(dps) : 配置文件解析的优先级,分隔 , 排在前面的优先级高, eg : cli,env,param -// - env-file(def) : 环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找s +// - parse-sort(dps) : 默认值 : cli,env,param 配置文件解析的优先级,分隔 , 排在前面的优先级高 +// - env-file(def) : 默认值 : .env 环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找 type DefaultConfig struct { - ConfigType string `short:"dct" long:"config-type" json:"config_type" ini:"config_type" yaml:"config_type" toml:"config_type" description:"配置文件类型 : ini / json / yml / yaml / toml , 默认值:空字符串,会根据传入配置文件后缀自行判断"` - ConfigPath string `short:"dcp" long:"config-path" json:"config_path" ini:"config_path" yaml:"config_path" toml:"config_path" description:"配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` - ParseSort string `short:"dps" long:"parse-sort" json:"parse_sort" ini:"parse_sort" yaml:"parse_sort" toml:"parse_sort" description:"参数解析优先级,支持 : cli/env/file"` - EnvFile string `short:"def" long:"env-file" json:"env_file" ini:"env_file" yaml:"env_file" toml:"env_file" description:"环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` + ConfigType string `short:"dct" long:"config-type" default:"" json:"config_type" ini:"config_type" yaml:"config_type" toml:"config_type" description:"配置文件类型 : ini / json / yml / yaml / toml , 默认值:空字符串,会根据传入配置文件后缀自行判断"` + ConfigPath string `short:"dcp" long:"config-path" default:"" json:"config_path" ini:"config_path" yaml:"config_path" toml:"config_path" description:"配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` + ParseSort string `short:"dps" long:"parse-sort" default:"cli,env,param" json:"parse_sort" ini:"parse_sort" yaml:"parse_sort" toml:"parse_sort" description:"参数解析优先级,支持 : cli/env/file"` + EnvFile string `short:"def" long:"env-file" default:".env" json:"env_file" ini:"env_file" yaml:"env_file" toml:"env_file" description:"环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` } diff --git a/init.go b/init.go index 3934477..2f7c270 100644 --- a/init.go +++ b/init.go @@ -8,7 +8,9 @@ package config import ( + "errors" "github.com/jessevdk/go-flags" + "reflect" ) // Init 初始化配置 @@ -21,8 +23,38 @@ func Init(configReceiver any) error { err error ) + if err = checkConfigReceiver(configReceiver); err != nil { + return err + } + if _, err = flags.Parse(configReceiver); nil != err { return err } return nil } + +// checkConfigReceiver 校验配置接收者必须是指针 +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:16 2024/11/5 +func checkConfigReceiver(configReceiver any) error { + if nil == configReceiver { + return errors.New("config receiver is nil") + } + receiverType := reflect.TypeOf(configReceiver) + if receiverType.Kind() != reflect.Ptr { + return errors.New("config receiver is not a pointer") + } + return nil +} + +// cloneReceiver ... +// +// Author : go_developer@163.com<白茶清欢> +// +// Date : 17:16 2024/11/5 +func cloneReceiver(configReceiver any) any { + dataType := reflect.TypeOf(configReceiver).Elem() + return reflect.New(dataType).Interface() +}