4
package main

type Key struct {
    stuff1 string
    stuff2 []string
}

type Val struct {
}

type MyMap struct {
    map1 map[Key]*Val // compiles fine!
}

func main() {
    var map2 map[Key]*Val // "invalid map key type Key"
}

这是正确的行为,还是 go 编译器中的错误?

我在 Linux x64 上使用 go-1.1。

4

1 回答 1

4

编译器是对的。从规格:地图类型

比较运算符 == 和 != 必须为键类型的操作数完全定义;因此键类型不能是函数、映射或切片。

如果键类型是所有结构字段的结构,则此限制可传递地应用,它们也必须遵守上面引用的规则,即

stuff2 []string

才不是。

编辑:

担心map1没有被标记,这可能一个错误,可能是由于从未引用 MyMap 引起的,因此它的类型检查可能被跳过了。

于 2013-06-13T11:17:15.570 回答