5

在下面的代码片段中,我做错了什么?

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)

双母羊 T eff?

4

1 回答 1

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
}

你为什么要递归调用buncode

于 2011-08-12T14:01:52.057 回答