Проблема в том, что вы итерируете карту и одновременно меняете ее, но ожидаете, что итерация не увидит, что вы сделали. Соответствующая часть кода:
for k, v := range a {
title := strings.Title(k)
a[title] = a[k]
delete(a, k)
}
Так что, если на карте указано {"hello":2, "world":3}
, и предположим, что ключи повторяются в указанном порядке. После первой итерации у вас теперь есть:
{"world":3, "Hello":2}
Следующая итерация:
{"World":3, "Hello":2}
Следующая итерация просматривает «Hello», которое уже написано с большой буквы, поэтому вы снова пишете его с большой буквы, изатем удалите его, получив в итоге:
{"World":3}
Возможно, вы захотите создать новую карту вместо перезаписи существующей и вернуть ее, чтобы вызывающая сторона могла использовать ее вместо нее.
func main() {
a := make(map[string]interface{})
a["start"] = map[string]interface{}{
"hello": 2,
"world": 3,
"here": map[string]interface{}{
"baam": 123,
"boom": "dsd",
},
}
a=printMap(a)
fmt.Println(a)
}
func printMap(a map[string]interface{}) map[string]interface{} {
newMap:=map[string]interface{}{}
for k, v := range a {
switch v.(type) {
case map[string]interface{}:
newMap[k]=printMap(v.(map[string]interface{}))
default:
title := strings.Title(k)
newMap[title] = a[k]
}
}
return newMap
}