golang匿名字段的类型映射

Eth*_*han 4 struct map anonymous-class go

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

type customMap struct{
    map[string]string
    ordered []string
}
Run Code Online (Sandbox Code Playgroud)

我可以在哪里引用地图customMapInstance["key"]并迭代ordered.唉,似乎数组和地图不是有效的匿名字段.我怀疑这是有充分理由的......

Ste*_*erg 6

从规格:

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

你看到它提到了"类型名称".

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

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

type MyMap map[string]string

type customMap struct{
    MyMap
    ordered []string
}
Run Code Online (Sandbox Code Playgroud)

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

type customMap struct{
    MyMap MyMap
    ordered []string
}
Run Code Online (Sandbox Code Playgroud)