从名称中获取reflect.Type
问题描述:
如果我有一个类型的名称(即“container/vector”),是否有方法查找具有给定名称的reflect.Type?我试图编写一个简单的数据库支持的工作队列系统,如果没有这个功能,这将非常困难。从名称中获取reflect.Type
答
由于名称解析是编译器/链接器的一部分,而不是运行时,所以我无法看到这将如何以任何微不足道的方式(或根本不可能)。
但是,http://github.com/nsf/gocode可能会提供一些想法。虽然我很确定这是通过处理$ GOROOT中的.a文件来实现的,但我仍然不知道如何获得reflect.Type。也许如果exp/eval软件包更成熟?
当然,如果您知道所有可能遇到的类型,则可以随时制作reflect.Type的地图。但我假设你正在处理不可预知的输入,或者你会想到这一点。
答
只有创建reflect.Type
的方法是首先具有预期类型的具体值。您甚至不能从基本类型(T
)创建复合类型,例如切片([]T
)。
从string
到reflect.Type
的唯一方法是自己输入映射。
mapping := map[string]reflect.Type {
"string": reflect.Typeof(""),
"container/vector": reflect.Typeof(new(vector.Vector)),
/* ... */
}