Mat*_*ner 5 dictionary go assign
在下面的代码片段中,我做错了什么?
type Element interface{}
func buncode(in *os.File) (e Element) {
<snip>
e = make(map[string]interface{})
for {
var k string = buncode(in).(string)
v := buncode(in)
e[k] = v
}
<snip>
}
Run Code Online (Sandbox Code Playgroud)
编译给我这个错误:
gopirate.go:38: invalid operation: e[k] (index of type Element)
Run Code Online (Sandbox Code Playgroud)
双母羊T eff?
在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
}
Run Code Online (Sandbox Code Playgroud)
你为什么要递归调用buncode?