我曾以为可以通过使用匿名字段来创建有序映射类型:
type customMap struct{
map[string]string
ordered []string
}
我希望能够使用customMapInstance["key"]
引用地图并遍历ordered
。可惜,数组和映射不是有效的匿名字段。我猜测这样做有很好的原因...
我曾以为可以通过使用匿名字段来创建有序映射类型:
type customMap struct{
map[string]string
ordered []string
}
我希望能够使用customMapInstance["key"]
引用地图并遍历ordered
。可惜,数组和映射不是有效的匿名字段。我猜测这样做有很好的原因...
根据规范:
嵌入类型必须被指定为类型名T或非接口类型名* T的指针,并且T本身不能是指针类型。
可以看到它提到了“类型名称”。
命名类型由(可能有资格的)类型名称指定;未命名类型使用类型文字指定,从现有类型组成新类型。
换句话说,除非将map或slice定义为命名类型,否则它们不能是匿名的。例如:
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{})
函数,这样就有可能被提升,是吗?对于通道和发送/接收来说也是一样的。如果能够直接在结构体上使用美观的 [ ]
和 <-
语法,那将非常好。 - Ethan