在下面的go片段中,我做错了什么?
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>
}
编译给了我这个错误:
gopirate.go:38: invalid operation: e[k] (index of type Element)
Double ewe T eff?
答案 0 :(得分:2)
在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
进行递归调用?