2010-08-25 122 views
1

如果我有一个类型的名称(即“container/vector”),是否有方法查找具有给定名称的reflect.Type?我试图编写一个简单的数据库支持的工作队列系统,如果没有这个功能,这将非常困难。从名称中获取reflect.Type

回答

1

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

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

当然,如果您知道所有可能遇到的类型,则可以随时制作reflect.Type的地图。但我假设你正在处理不可预知的输入,或者你会想到这一点。

0

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

stringreflect.Type的唯一方法是自己输入映射。

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