func mergeMaps()

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
}