В функции buncode
вы объявляете e Element
, где type e Element interface{}
. Переменная e
является скалярным значением, которое вы пытаетесь проиндексировать.
Типы
Статический тип (или просто тип) переменной - это тип, определенный
его декларация. Переменные типа интерфейса также имеют
динамический тип, который является фактическим типом значения, хранящегося в
переменная во время выполнения. Динамический тип может изменяться во время выполнения, но
всегда присваивается статическому типу интерфейсной переменной. За
неинтерфейсные типы, динамический тип всегда является статическим типом.
Статический тип e
равен Element
, скаляр. Динамический тип e
равен map[string]interface{}
.
Вот пересмотренная, компилируемая версия вашего кода.
type Element interface{}
func buncode(in *os.File) (e Element) {
m := make(map[string]interface{})
for {
var k string = buncode(in).(string)
v := buncode(in)
m[k] = v
}
return m
}
Почему вы делаете рекурсивные вызовы на buncode
?