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
}