数据接收指针数据clone并初始化

This commit is contained in:
白茶清欢 2024-11-05 18:04:27 +08:00
parent d0dc0fba97
commit 8cf014ac0a
2 changed files with 38 additions and 6 deletions

View File

@ -16,11 +16,11 @@ package config
// 默认配置文件路径配置, 配置文件路径及类型也可通过命令行参数指定. 支持属性如下: // 默认配置文件路径配置, 配置文件路径及类型也可通过命令行参数指定. 支持属性如下:
// - config-type(dct) : 配置文件类型 ini / json / yml / yaml / toml , 默认值:空字符串,会根据传入配置文件后缀自行判断 // - config-type(dct) : 配置文件类型 ini / json / yml / yaml / toml , 默认值:空字符串,会根据传入配置文件后缀自行判断
// - config-path(dcp) : 配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找 // - config-path(dcp) : 配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找
// - parse-sort(dps) : 配置文件解析的优先级,分隔 , 排在前面的优先级高, eg : cli,env,param // - parse-sort(dps) : 默认值 : cli,env,param 配置文件解析的优先级,分隔 , 排在前面的优先级高
// - env-file(def) : 环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找s // - env-file(def) : 默认值 : .env 环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找
type DefaultConfig struct { 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 , 默认值:空字符串,会根据传入配置文件后缀自行判断"` 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" json:"config_path" ini:"config_path" yaml:"config_path" toml:"config_path" description:"配置文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` 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" json:"parse_sort" ini:"parse_sort" yaml:"parse_sort" toml:"parse_sort" description:"参数解析优先级,支持 : cli/env/file"` 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" json:"env_file" ini:"env_file" yaml:"env_file" toml:"env_file" description:"环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"` EnvFile string `short:"def" long:"env-file" default:".env" json:"env_file" ini:"env_file" yaml:"env_file" toml:"env_file" description:"环境变量文件路径, 传入绝对路径,则使用绝对路径读取,传入相对路径,则自动在服务运行的根目录下进行文件查找"`
} }

32
init.go
View File

@ -8,7 +8,9 @@
package config package config
import ( import (
"errors"
"github.com/jessevdk/go-flags" "github.com/jessevdk/go-flags"
"reflect"
) )
// Init 初始化配置 // Init 初始化配置
@ -21,8 +23,38 @@ func Init(configReceiver any) error {
err error err error
) )
if err = checkConfigReceiver(configReceiver); err != nil {
return err
}
if _, err = flags.Parse(configReceiver); nil != err { if _, err = flags.Parse(configReceiver); nil != err {
return err return err
} }
return nil 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()
}