从名称中获取reflect.Type

时间:2010-08-25 16:59:37

标签: go

如果我有一个类型的名称(即“容器/矢量”),有没有办法查找具有给定名称的reflect.Type?我正在尝试编写一个简单的数据库支持的工作队列系统,如果没有这个功能,这将非常困难。

2 个答案:

答案 0 :(得分:1)

由于名称解析是编译器/链接器的一部分,而不是运行时,我无法看到这是如何以任何微不足道的方式(或根本不可能)实现的。

但是,http://github.com/nsf/gocode可能会提供一些想法。虽然我很确定通过处理$ GOROOT中的.a文件来工作,所以我仍然看不到你如何获得reflect.Type。也许如果exp / eval包更成熟?

当然,如果你知道你将遇到的所有可能的类型,你总是可以制作一个reflect.Type的地图。但我假设你正在使用不可预测的输入,或者你会想到这一点。

答案 1 :(得分:0)

创建reflect.Type的唯一方法是首先具有预期类型的​​具体值。您甚至无法从基类型([]T)创建复合类型,例如切片(T)。

stringreflect.Type的唯一方法是自己输入地图。

mapping := map[string]reflect.Type {
  "string": reflect.Typeof(""),
  "container/vector": reflect.Typeof(new(vector.Vector)),
  /* ... */
}