将反射值转换为golang中的类型?

时间:2018-05-18 09:27:16

标签: go reflection

是否可以将reflect.Zero/New生成的值动态转换回任意类型?

https://blog.golang.org/laws-of-reflection似乎没有暗示(因为静态输入)。就我所见,这几乎似乎限制了反射的使用,因为你总是需要知道你正在使用的类型。

这是我的意思的一个例子:

package main

import (
    "fmt"
    "reflect"
)

type A struct {
    Name string
}

func main() {

    a := &A{Name: "Dave"}
    fmt.Println(a)

    //create a nil pointer of an arbitrary type
    dynamicType := reflect.TypeOf(a)
    dynamicNil := reflect.Zero(dynamicType).Interface()
    a = dynamicNil //is it possible to do this without explicitly casting to A (ie. avoiding `a = dynamicNil.(*A)`)
    fmt.Println(a)
}

1 个答案:

答案 0 :(得分:2)

你的问题的散文和代码相矛盾。

在您的代码中,dynamicNil的类型为interface{},而不是散文建议的reflect.Value。由于a具有具体类型*A,您必须将dynamicNil键入 - *A。没有办法解决这个问题。

另请注意,Go没有强制转换 - 只有类型转换和断言。

编辑:也许您正在寻找reflect.Value.Set?我不清楚。