fix: conf anonymous overlay problem (#2847)
This commit is contained in:
@@ -107,6 +107,20 @@ func MustLoad(path string, v any, opts ...Option) {
|
||||
}
|
||||
}
|
||||
|
||||
func addOrMergeFields(info map[string]fieldInfo, key, name string, fields map[string]fieldInfo) {
|
||||
if prev, ok := info[key]; ok {
|
||||
// merge fields
|
||||
for k, v := range fields {
|
||||
prev.children[k] = v
|
||||
}
|
||||
} else {
|
||||
info[key] = fieldInfo{
|
||||
name: name,
|
||||
children: fields,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func buildFieldsInfo(tp reflect.Type) map[string]fieldInfo {
|
||||
tp = mapping.Deref(tp)
|
||||
|
||||
@@ -134,11 +148,12 @@ func buildStructFieldsInfo(tp reflect.Type) map[string]fieldInfo {
|
||||
if ft.Kind() == reflect.Struct {
|
||||
fields := buildFieldsInfo(ft)
|
||||
for k, v := range fields {
|
||||
info[k] = v
|
||||
addOrMergeFields(info, k, v.name, v.children)
|
||||
}
|
||||
} else {
|
||||
info[lowerCaseName] = fieldInfo{
|
||||
name: name,
|
||||
name: name,
|
||||
children: make(map[string]fieldInfo),
|
||||
}
|
||||
}
|
||||
continue
|
||||
@@ -154,17 +169,7 @@ func buildStructFieldsInfo(tp reflect.Type) map[string]fieldInfo {
|
||||
fields = buildFieldsInfo(ft.Elem())
|
||||
}
|
||||
|
||||
if prev, ok := info[lowerCaseName]; ok {
|
||||
// merge fields
|
||||
for k, v := range fields {
|
||||
prev.children[k] = v
|
||||
}
|
||||
} else {
|
||||
info[lowerCaseName] = fieldInfo{
|
||||
name: name,
|
||||
children: fields,
|
||||
}
|
||||
}
|
||||
addOrMergeFields(info, lowerCaseName, name, fields)
|
||||
}
|
||||
|
||||
return info
|
||||
|
||||
Reference in New Issue
Block a user