2017-07-27 31 views
0

在Golang中,map中的值可以是類型嗎?例如我如何創建地圖米[字符串]類型,使得它可以是這樣的,可以映射值是變量類型嗎?

m["abc"] = int 
m["def"] = string 
m["ghi"] = structtype (some structure of type structtype) 

予需要這樣的地圖,因爲我有有一個字符串參數,並根據該字符串參數的函數的函數創建一個特定類型的變量並執行一些操作。因此,如果我有一個將字符串映射到類型的映射,函數可以使用字符串參數作爲關鍵字來檢查該映射,以找出它需要創建的變量類型。

+1

類型不是值,但可以使用類型的零值或'reflect.Type'值。 – JimB

+1

您需要熟悉'reflect'包。 – RayfenWindspear

+0

RayfenWindspear和@JimB所以地圖應該定義爲m [string] interface {}? – user1851006

回答

4

我聽起來像您需要map[string]reflect.Type

val := map[string]reflect.Type{}{} 

val["int"] = reflect.TypeOf(int(0)) 
pointer_to_new_item := reflect.New(val["int"]) 

如果你需要一個非指針值然後使用Indirect

new_item := reflect.Indirect(pointer_to_new_item) 

使用反映創造價值會給你一個reflect.Value,這那麼您需要使用其他反射函數解壓縮所需的實際值。有關更多信息,請參閱The reflect documentation

請記住,reflect.New只能生成簡單的類型,結構等。如果您需要通道,地圖或切片,還有其他類似的功能,如make內置工作。

+1

在你的例子中,而不是int,如果它是一個結構類型,我必須創建一個該類型的隨機結構變量來反映它的值嗎? – user1851006

+1

是的,但您只需在填充地圖時執行此操作,因此只需執行一次。 – RayfenWindspear

+0

謝謝,這有幫助。 – user1851006

相關問題