映射为匿名结构成员

时间:2013-08-02 09:33:18

标签: map go

我在某些行为中遇到了一些我完全无法理解的行为,任何形式的解释都会很好:

type Test struct{
    Name string // or other metadata to be stored along the core map element
    map[string]string
}

上述代码无法编译时出现unexpected map错误。 这可能是因为struct Field delarations必须是类型,但是我没有说明为什么map[string]string不是类型。

将其更改为

type Embedded map[string]string

type Test struct{
    Name string
    Embedded
}

得到编译器错误,但仍Test["someKey"]引发编译器错误 invalid operation: Test["someKey"] (index of type Test)

当然直接使用Test.Embedded [“someKey”]来解决这个令人厌恶的领域, 但我的问题是:

  • 为什么文字地图声明在非匿名字段声明中作为类型有效,但在匿名字段中无效
  • 为什么索引包含类型不起作用?为什么它不起作用?

感谢您的澄清。

1 个答案:

答案 0 :(得分:2)

  1. Anonymous fields必须只是命名类型。你可能有点困惑TypeLiteralTypeTypeName

  2. 参考匿名字段的规格是由其类型名称完成的。因此Test.Embedded[key]是唯一的法律形式。在这里,您可能会混淆嵌入式字段方法,它们是从嵌入字段继承的,无需使用字段名称和必须使用它的字段 value 。 / p>