In the buncode function you declare e Element, where type e Element interface{}. The variable e is a scalar value, which you are trying to index.
Types
The static type (or just type) of a variable is the type defined by
its declaration. Variables of interface type also have a distinct
dynamic type, which is the actual type of the value stored in the
variable at run-time. The dynamic type may vary during execution but
is always assignable to the static type of the interface variable. For
non-interface types, the dynamic type is always the static type.
The static type of e is Element, a scalar. The dynamic type of e is map[string]interface{}.
Here's a revised, compilable version of your code.
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
}
Why are you making the recursive calls to buncode?