Serhioromano
@Serhioromano
Web Developer

Почему не назначается новый ключи в итнерфейс?

Вот такой простой пирмер.

var save = make(map[string]interface{})

save["name"] = viper.GetString("db")
save["prefix"] = db.Prefix
save["tables"] = make(map[string]interface{})
save["tables"]["ddd"] = 1


Почему на последенй строке ошибка?

invalid operation: save["tables"]["ddd"] (type interface {} does not support indexing)

Вот так работает

save["name"] = viper.GetString("db")
save["prefix"] = db.Prefix
save["tables"]["ddd"] = 1
fg := make(map[string]interface{})
save["tables"] = fg


А в чем в принципе разница?
  • Вопрос задан
  • 43 просмотра
Пригласить эксперта
Ответы на вопрос 1
Потому что тип interface{} это не map, в него нельзя положить ключ. Из него надо сначала достать map с помощью приведения типов

P.S. Go это не скритовый язык, старайтесь не переносить в него паттерны из Js, PHP, Python. В данной задаче вам скорее всего нужны структуры. map[string]interface{} стоит использовать только в самых крайних случаях.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы