Map 分配给golang的地图
在下面的围棋片段中,我做错了什么Map 分配给golang的地图,map,go,assign,Map,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 } <sni
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>
}
在
buncode
函数中声明e元素
,其中键入e元素接口{}
。变量e
是一个标量值,您正试图对其进行索引
变量的静态类型(或只是类型)是由定义的类型
它的宣言。接口类型的变量也具有不同的
动态类型,它是存储在
运行时的变量。动态类型在执行期间可能会有所不同,但
始终可分配给接口变量的静态类型。对于
非接口类型,动态类型始终是静态类型
e
的静态类型是元素
,一个标量。e
的动态类型是map[string]接口{}
这是您的代码的修订版、可编译版
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
?但是我用make中的赋值设置了它的类型?我从上的规范中收集到,该类型现在将是我分配给它的“较大”类型。如果您感兴趣,并且有一些惯用的go-ism要提出,请看这里:@Matt(1)-编译器不会跟踪接口{}值的动态类型,即使它可以静态地被知道。必须使用具有正确类型的单独变量。是否确实要编译此变量?将元素指定为返回值,然后返回映射。我只是好奇我是否遗漏了什么。
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
}