diff --git a/conf/conf.ini b/conf/conf.ini index 6f58c93..d7b2560 100644 --- a/conf/conf.ini +++ b/conf/conf.ini @@ -14,12 +14,12 @@ BosBaseDir = "fonchain-main" BosHttp = "https://" BosDomain = "cdns.fontree.cn" [oss] -AccessKeyId = "LTAI5tCx628rkZ65oi5F5nxu" -AccessKeySecret = "WjSLa9tWs8RTdUmhKu3HLXIMogdUbo" -Endpoint = "cdn-test.cdn.szjixun.cn" -BucketName = "fontree-test2" -BaseDir = "fonchain-main" -CdnHost = "https://cdn-test.szjixun.cn" +AccessKeyId = "${OSS_AK}" +AccessKeySecret = "${OSS_SK}" +Endpoint = "${OSS_ENDPOINTT}" +BucketName = "${OSS_BUCKETNAME}" +BaseDir = "fontree-fiee-test" +CdnHost = "${OSS_CDN}" [redis] RedisDB = "2" RedisAddr = "127.0.0.1:6379" diff --git a/docs/dev/conf.ini b/docs/dev/conf.ini index bc81be3..d8119f3 100644 --- a/docs/dev/conf.ini +++ b/docs/dev/conf.ini @@ -15,12 +15,12 @@ BosBaseDir = "fiee" BosHttp = "https://" BosDomain = "cdns.fontree.cn" [oss] -AccessKeyId = "LTAI5tLz1fSK53FQAEC9uNSb" -AccessKeySecret = "oGB9chrQzQzITXR2IGv37Ji5WxZh4j" -Endpoint = "oss-cn-hangzhou.aliyuncs.com" -BucketName = "fontree-test" -BaseDir = "fiee" -CdnHost = "https://cdn-test.szjixun.cn" +AccessKeyId = "${OSS_AK}" +AccessKeySecret = "${OSS_SK}" +Endpoint = "${OSS_ENDPOINTT}" +BucketName = "${OSS_BUCKETNAME}" +BaseDir = "fontree-fiee-test" +CdnHost = "${OSS_CDN}" [redis] RedisDB = "2" diff --git a/docs/prod/conf.ini b/docs/prod/conf.ini index 1fb820e..00db519 100644 --- a/docs/prod/conf.ini +++ b/docs/prod/conf.ini @@ -26,12 +26,12 @@ TelNum = "18021272627" Password = "Gy.123456" [oss] -AccessKeyId = "LTAI5tHfjSmWXHqfWgaL7Uo5" -AccessKeySecret = "kOPctFZ3DHsbdSSym1fLyDK39hkzPI" -Endpoint = "oss-cn-hangzhou.aliyuncs.com" -BucketName = "erp-k8s-store" -BaseDir = "fiee" -CdnHost = "https://e-cdn.fontree.cn" +AccessKeyId = "${OSS_AK}" +AccessKeySecret = "${OSS_SK}" +Endpoint = "${OSS_ENDPOINTT}" +BucketName = "${OSS_BUCKETNAME}" +BaseDir = "fontree-fiee" +CdnHost = "${OSS_CDN}" [stripe] Webhookkey = "whsec_Mol32WD1KcKHUdYsSwap0LR03q2g9qNY" diff --git a/docs/test/conf.ini b/docs/test/conf.ini index cbfbbcb..713e0ce 100644 --- a/docs/test/conf.ini +++ b/docs/test/conf.ini @@ -16,12 +16,12 @@ BosHttp = "https://" BosDomain = "cdns.fontree.cn" [oss] -AccessKeyId="LTAI5tLz1fSK53FQAEC9uNSb" -AccessKeysecret ="oGB9chrQzQzITXR2IGv37Ji5WxZh4j" -Endpoint = "oss-cn-hangzhou.aliyuncs.com" -BucketName = "fontree-test" -BaseDir = "fiee" -CdnHost = "https://cdn-test.szjixun.cn" +AccessKeyId = "${OSS_AK}" +AccessKeySecret = "${OSS_SK}" +Endpoint = "${OSS_ENDPOINTT}" +BucketName = "${OSS_BUCKETNAME}" +BaseDir = "fontree-fiee-test" +CdnHost = "${OSS_CDN}" [redis] RedisDB = "2" diff --git a/pkg/config/config.go b/pkg/config/config.go index a589da8..aa9f762 100644 --- a/pkg/config/config.go +++ b/pkg/config/config.go @@ -4,9 +4,12 @@ import ( "fmt" "fonchain-fiee/pkg/common" "github.com/spf13/viper" + "go.uber.org/zap" "gopkg.in/ini.v1" "os" + "reflect" "strconv" + "strings" ) var ( @@ -249,5 +252,63 @@ func Viper(iniConf string) (err error) { panic("viper.Unmarshal failed" + err.Error()) return } + traverseFields(reflect.ValueOf(*ConfigData), "", ConfigData) + zap.L().Info("ConfigData", zap.Any("ConfigData", ConfigData)) + fmt.Printf("ConfigData--%+v", ConfigData) return } +func traverseFields(value reflect.Value, prefix string, configPtr interface{}) { + valueType := value.Type() + prefixEnv := "${" + suffixEnv := "}" + // 遍历结构体的字段 + for i := 0; i < valueType.NumField(); i++ { + field := valueType.Field(i) + fieldValue := value.Field(i) + // 拼接字段名(带有前缀) + fieldName := prefix + field.Name + // 判断字段的类型 + if fieldValue.Kind() == reflect.Struct { + // 递归遍历嵌套结构体字段 + traverseFields(fieldValue, fieldName+".", configPtr) + } else { + // 获取字段的值 + fieldValueStr := fmt.Sprintf("%v", fieldValue.Interface()) + // 判断是不是需要通过环境变量获取 + if len(fieldValueStr) > 3 && strings.HasPrefix(fieldValueStr, prefixEnv) && strings.HasSuffix(fieldValueStr, suffixEnv) { + end := len(fieldValueStr) - len(suffixEnv) + var hasDefault bool + if strings.Index(fieldValueStr, "|") > 0 { + hasDefault = true + end = strings.Index(fieldValueStr, "|") + } + envStr := fieldValueStr[len(prefixEnv):end] + getValue := os.Getenv(envStr) + if getValue == "" && hasDefault { + getValue = fieldValueStr[end+1 : len(fieldValueStr)-len(suffixEnv)] + } + setSubFieldValue(configPtr, fieldName, getValue) + } + } + } +} + +func setSubFieldValue(configPtr interface{}, fieldPath string, newValue interface{}) { + value := reflect.ValueOf(configPtr).Elem() + fields := strings.Split(fieldPath, ".") + for _, field := range fields { + value = value.FieldByName(field) + if !value.IsValid() { + return // 字段不存在,直接返回 + } + if value.Kind() == reflect.Ptr { + value = value.Elem() // 解引用指针类型的字段 + } + } + // 检查字段是否可设置 + if value.CanSet() { + // 根据字段类型,将新值转换为对应类型并设置字段的值 + newValue := reflect.ValueOf(newValue).Convert(value.Type()) + value.Set(newValue) + } +}