0

我在 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
}

get 解决了编译器错误,但仍然Test["someKey"]引发了编译器错误 invalid operation: Test["someKey"] (index of type Test)

当然,直接使用 Test.Embedded["someKey"] 处理匿名字段是可行的,但我的问题是:

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

感谢您的澄清。

4

1 回答 1

2
  1. 匿名字段只能是命名类型。您可能有些混淆TypeLiteralTypeTypeName

  2. 对匿名字段的引用由规范规定,始终由其类型名称完成。因此Test.Embedded[key]是唯一的合法形式。在这里您可能会混淆嵌入字段方法,它们继承自嵌入字段而无需使用字段名称和字段,而必须使用它。

于 2013-08-02T09:39:47.977 回答