in config/config_map.go [261:306]
func mergeMaps(map1, map2 map[string]interface{}) map[string]interface{} {
if len(map1) == 0 {
return map2
}
if len(map2) == 0 {
return map1
}
mergedMap := make(map[string]interface{})
for key, value := range map1 {
map2Value, ok := map2[key]
// key doesn't exist in map2 so add it to the merged map
if !ok {
mergedMap[key] = value
continue
}
// key exists in map2 but map1 value is NOT a map, so add value from map2
mapFromMap1, ok := value.(map[string]interface{})
if !ok {
mergedMap[key] = map2Value
continue
}
mapFromMap2, ok := map2Value.(map[string]interface{})
// key exists in map2, map1 value IS a map but map2 value is not, so overwrite with map2
if !ok {
mergedMap[key] = mapFromMap2
continue
}
// key exists in map2, map1 value IS a map, map2 value IS a map, so merge recursively
mergedMap[key] = mergeMaps(mapFromMap1, mapFromMap2)
}
// add any keys that exist in map2 but not in map1
for key, value := range map2 {
if _, ok := mergedMap[key]; !ok {
mergedMap[key] = value
}
}
return mergedMap
}