golang匿名字段的类型映射

时间:2014-10-19 03:41:40

标签: map struct go anonymous-class

我以为我可以使用匿名字段制作有序的地图类型:

type customMap struct{
    map[string]string
    ordered []string
}

我可以使用customMapInstance["key"]引用地图并迭代ordered。唉,似乎数组和地图不是有效的匿名字段。我怀疑这是一个很好的理由......

1 个答案:

答案 0 :(得分:6)

来自规范:

  

必须将嵌入类型指定为类型名称T或指向非接口类型名称* T的指针,并且T本身可能不是指针类型。

您看到它提到了“类型名称”。

  

命名类型由(可能是合格的)类型名称指定;使用类型文字指定未命名的类型,类型文字从现有类型组成新类型。

换句话说,除非将地图或切片定义为命名类型,否则它们可能不是匿名的。例如:

type MyMap map[string]string

type customMap struct{
    MyMap
    ordered []string
}

但是,即使嵌入了MyMap或切片类型,您仍然无法索引customMap。嵌入时,只有字段和方法可以“升级”。对于其他一切,他们只是另一个领域。在上面的示例中,MyMap没有任何字段或方法,因此等同于:

type customMap struct{
    MyMap MyMap
    ordered []string
}