在 golang 中分配给地图

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?

pet*_*rSO 3

buncode您声明的函数中e Element,其中type e Element interface{}. 该变量e是一个标量值,您正尝试对其进行索引。

类型

变量的静态类型(或仅类型)是由其声明定义的类型。接口类型的变量还具有独特的动态类型,它是运行时存储在变量中的值的实际类型。动态类型在执行期间可能会发生变化,但始终可分配给接口变量的静态类型。对于非接口类型,动态类型始终是静态类型。

的静态类型eElement,一个标量。的动态类型emap[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