在Golang中,map中的值可以是类型吗?例如,如何创建地图m [string]类型,使其可以像这样,
m["abc"] = int
m["def"] = string
m["ghi"] = structtype ( some structure of type structtype)
我需要这样的地图因为,我有一个函数,它有一个字符串参数,根据该字符串参数,该函数创建一个特定类型的变量并执行一些操作。因此,如果我有一个将字符串映射到一个类型的映射,该函数可以使用字符串参数作为键来检查该映射,以找出它需要创建的变量类型。
答案 0 :(得分: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创建一个值将为您提供reflect.Value
,然后您需要使用其他反射函数解压缩您想要的实际值。有关详细信息,请参阅The reflect documentation。
请记住,reflect.New
只会生成简单的类型,结构等。如果您需要频道,地图或切片,则还有其他类似的功能,就像内置make
一样。