我实际上是在golang中使用反射来尝试一些黑魔法:P
我有这样的事情:
var _int int
var _int32 int32
var _int64 int64
var _string string
var nilablesIndex map[int]reflect.Value
var nilables = map[string]reflect.Type {
"int32": reflect.TypeOf(_int32)},
"int64": reflect.TypeOf(_int64)},
"int": reflect.TypeOf(_int)},
"string": reflect.TypeOf(_string)},
}
nilablesIndex[len(m) - 1] = reflect.New(nilables[field.Type.String()][1])
总结一下,我现在有一个由reflect.New(nilables[field.Type.String()][1])
我想要的是按原始类型转换此变量。
示例:如果nilablesIndex[0]
是reflect.Type int32
,我想将其转换为int32
类型。
有可能吗?
谢谢:)
答案 0 :(得分:1)
你不能让它变得动态,因为你实际上正在转换为具体的类型(如果它是动态的,结果的类型是什么?interface{}
?你' d在开始时回来。)
您可以使用Value.Interface()
和type assertion。
例如:
var i int32 = 3
v := reflect.ValueOf(i)
x := v.Interface().(int32)
fmt.Printf("%T %v", x, x)
输出(在Go Playground上尝试):
int32 3