2013-08-02 48 views
0

我被絆倒在旅途中的一些行爲,我不能做的完全意義和任何形式的解釋相關是惠康:地圖爲匿名結構成員

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

上面的代碼將失敗,並unexpected map錯誤編譯。 這可能是因爲struct Field錯誤必須是類型,但我未能明白爲什麼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 adressing的anoymous領域「someKey」]的作品, 但我的問題是:

  • 爲什麼在非匿名字段聲明而不是類型的有效文字地圖聲明在匿名字段中有效
  • 爲什麼索引包含類型不起作用?爲什麼它不能工作?

感謝澄清。

回答

2
  1. Anonymous fields必須僅命名爲類型。你可能有點困惑Type,LiteralTypeTypeName

  2. 參考匿名場是由規格藥方裏要由它的類型名稱一直在做。因此Test.Embedded[key]是唯一合法的形式。在這裏,你可能會被混淆了嵌入式領域方法,這是從嵌入式領域繼承了W/O需要使用的字段名和字段值,必須使用它。

+0

感謝澄清。 – tike

+0

那麼爲什麼不是「[]」操作的繼承方法? – joshlf

+1

@ joshlf13 B/C運營商不是方法。 – zzzz