Map 映射类型的golang匿名字段

Map 映射类型的golang匿名字段,map,struct,go,anonymous-class,Map,Struct,Go,Anonymous Class,我想我可以通过使用匿名字段创建有序映射类型: type customMap struct{ map[string]string ordered []string } 在这里,我可以使用customMapInstance[“key”]引用映射,并在ordered上迭代。唉,看来数组和映射不是有效的匿名字段。我怀疑有一个很好的理由…来自规范: 嵌入类型必须指定为类型名T或指向非接口类型名*T的指针,并且T本身不能是指针类型 您可以看到它提到了一个“类型名” 命名类型由(可能是限定的

我想我可以通过使用匿名字段创建有序映射类型:

type customMap struct{
    map[string]string
    ordered []string
}
在这里,我可以使用
customMapInstance[“key”]
引用映射,并在
ordered
上迭代。唉,看来数组和映射不是有效的匿名字段。我怀疑有一个很好的理由…

来自规范:

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

您可以看到它提到了一个“类型名”

命名类型由(可能是限定的)类型名指定;未命名的类型是使用类型文本指定的,该文本从现有类型组成一个新类型

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

type MyMap map[string]string

type customMap struct{
    MyMap
    ordered []string
}

但是,即使嵌入MyMap或切片类型,也无法为customMap编制索引。嵌入时,只能“提升”字段和方法。在其他方面,它们只是另一个领域。在上面的示例中,MyMap没有任何字段或方法,因此相当于:

type customMap struct{
    MyMap MyMap
    ordered []string
}

您可以在这里看到()嵌入未命名类型的另一次尝试。它也失败了。实际上,我在嵌入之前已经尝试过命名,但唉。我没有看过实现,但是索引映射听起来像调用
m.hashTableLookup(key interface{})
函数,在这种情况下它可能会被提升,是吗?频道和发送/接收也是如此。如果您可以使用可爱的
[]
这与python或其他动态语言不同,在这些语言中,索引语法是对一种神奇方法的调用,那将非常棒。使用[]或者为什么可以匿名嵌入
string
?Go规范在过去的几年中进行了许多更改。“命名类型”甚至“匿名字段”不再是规范使用的术语。然而,在我编写原始答案时,字符串被认为是命名类型。未命名类型是由结构、切片、映射等类型组成的,这些类型表示为类型文字,没有标识符作为名称。