可以将值映射为变量类型吗?

时间:2017-07-27 20:37:20

标签: dictionary go

在Golang中,map中的值可以是类型吗?例如,如何创建地图m [string]类型,使其可以像这样,

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

我需要这样的地图因为,我有一个函数,它有一个字符串参数,根据该字符串参数,该函数创建一个特定类型的变量并执行一些操作。因此,如果我有一个将字符串映射到一个类型的映射,该函数可以使用字符串参数作为键来检查该映射,以找出它需要创建的变量类型。

1 个答案:

答案 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一样。