英文:
Getting a reflect.Type from a name
问题
如果我有一个类型的名称(例如"container/vector"),是否有一种方法可以查找具有给定名称的reflect.Type?我正在尝试编写一个简单的基于数据库的工作队列系统,如果没有这个功能,将会非常困难。
英文:
If I have a name of a type (i.e "container/vector"), is there a way to lookup the reflect.Type that has the given name? I'm trying to write a simple database-backed workqueue system and this it would be very difficult without this feature.
答案1
得分: 1
我无法看到以任何简单的方式(或根本不可能)实现这一点,因为名称解析是编译器/链接器的一部分,而不是运行时。
然而,http://github.com/nsf/gocode 可能会提供一些想法。虽然我相当确定它是通过处理$GOROOT中的.a文件来工作的,所以我仍然不明白你如何获得reflect.Type。也许如果exp/eval包更成熟一些会有办法?
当然,如果你知道所有可能遇到的类型,你可以始终创建一个reflect.Type的映射。但我假设你正在处理不可预测的输入,否则你早就想到了这一点。
英文:
I can't see how this would be possible in any trivial way (or at all), since name resolution is part of the compiler/linker, not the runtime.
However, http://github.com/nsf/gocode might offer up some ideas. Though I'm pretty sure that works by processing the .a files in $GOROOT, so I still don't see how you'd get the reflect.Type. Maybe if the exp/eval package was more mature?
Of course if you know all the possible types you'll encounter, you could always make a map of the reflect.Type. But I'm assuming you're working with unpredictable input, or you would've thought of that.
答案2
得分: 0
只有通过首先拥有预期类型的具体值,才能创建reflect.Type
。甚至无法从基本类型(T
)创建复合类型,例如切片([]T
)。
从string
到reflect.Type
的唯一方法是手动输入映射。
mapping := map[string]reflect.Type {
"string": reflect.TypeOf(""),
"container/vector": reflect.TypeOf(new(vector.Vector)),
/* ... */
}
英文:
Only way to create a reflect.Type
is by having a concrete value of the intended type first. You can't even create composite-types, such as a slice ([]T
), from a base type (T
).
The only way to go from a string
to a reflect.Type
is by entering the mapping yourself.
mapping := map[string]reflect.Type {
"string": reflect.Typeof(""),
"container/vector": reflect.Typeof(new(vector.Vector)),
/* ... */
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论