在golang中分配映射

时间:2011-08-12 13:37:02

标签: map go assign

在下面的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?

1 个答案:

答案 0 :(得分:2)

buncode函数中,您声明e Element,其中type e Element interface{}。变量e是标量值,您尝试将其编入索引。

  

Types

     

变量的静态类型(或只是类型)是由其定义的类型   它的声明。接口类型的变量也有明显的变化   动态类型,它是存储在中的值的实际类型   运行时变量。动态类型可能在执行期间有所不同   始终可分配给接口变量的静态类型。对于   非接口类型,动态类型始终是静态类型。

e的静态类型是Element,是标量。动态类型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
}

为什么要对buncode进行递归调用?