fix: change tracks to sync.Map to void dead lock

This commit is contained in:
langhuihui
2023-05-21 14:27:57 +08:00
parent 3ee931ce61
commit e21f8f765a
9 changed files with 170 additions and 37 deletions

View File

@@ -80,8 +80,14 @@ func (config Config) Unmarshal(s any) {
//字段映射,小写对应的大写
nameMap := make(map[string]string)
for i, j := 0, t.NumField(); i < j; i++ {
name := t.Field(i).Name
nameMap[strings.ToLower(name)] = name
field := t.Field(i)
name := field.Name
if tag := field.Tag.Get("yaml"); tag != "" {
name, _, _ = strings.Cut(tag, ",")
} else {
name = strings.ToLower(name)
}
nameMap[name] = field.Name
}
for k, v := range config {
name, ok := nameMap[k]
@@ -190,6 +196,12 @@ func Struct2Config(s any, prefix ...string) (config Config) {
continue
}
name := strings.ToLower(ft.Name)
if tag := ft.Tag.Get("yaml"); tag != "" {
if tag == "-" {
continue
}
name, _, _ = strings.Cut(tag, ",")
}
var envPath []string
if len(prefix) > 0 {
envPath = append(prefix, strings.ToUpper(ft.Name))
@@ -201,9 +213,6 @@ func Struct2Config(s any, prefix ...string) (config Config) {
return
}
}
if ft.Tag.Get("json") == "-" {
continue
}
switch ft.Type.Kind() {
case reflect.Struct:
config[name] = Struct2Config(fv, envPath...)