Map 映射为匿名结构成员

Map 映射为匿名结构成员,map,go,Map,Go,我在围棋中遇到了一些我无法完全理解的行为,任何形式的解释都是好的: type Test struct{ Name string // or other metadata to be stored along the core map element map[string]string } 上述代码将无法编译,并出现意外映射错误。 这可能是因为结构字段增量必须是类型,但我无法解释为什么map[string]string不是类型 改成 type Embedded map[strin

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

type Test struct{
    Name string // or other metadata to be stored along the core map element
    map[string]string
}
上述代码将无法编译,并出现
意外映射
错误。 这可能是因为结构字段增量必须是类型,但我无法解释为什么
map[string]string
不是类型

改成

type Embedded map[string]string

type Test struct{
    Name string
    Embedded
}
get围绕编译器错误,但仍然
Test[“someKey”]
引发编译器错误
无效操作:测试[“someKey”](类型测试索引)

当然,用Test直接处理异常字段。嵌入式[“someKey”]可以工作, 但我的问题是:

  • 为什么文字映射声明在非匿名字段声明中作为类型有效,但在匿名字段中无效
  • 为什么索引包含类型不起作用?为什么它不能工作
谢谢你的澄清

  • 只能是命名类型。你可能有点困惑,而且

  • 引用匿名字段是由规范规定的,通常是通过其类型名来完成的。因此,
    Test.Embedded[key]
    是唯一合法的形式。在这里,您可能会混淆嵌入式字段方法,这些方法是从嵌入式字段继承的,不需要使用字段名和字段值,而字段值必须使用它


  • 那么为什么“[]”操作不是继承的方法呢?@joshlf13 B/c运算符不是方法。我想这可能就是答案。