如何在reflect.New创建时按类型转换reflect.Value

时间:2017-06-12 09:37:37

标签: go reflection

我实际上是在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])

创建的reflect.Value

我想要的是按原始类型转换此变量。

示例:如果nilablesIndex[0]reflect.Type int32,我想将其转换为int32类型。

有可能吗?

谢谢:)

1 个答案:

答案 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