是否可以将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)
}
答案 0 :(得分:2)
你的问题的散文和代码相矛盾。
在您的代码中,dynamicNil
的类型为interface{}
,而不是散文建议的reflect.Value
。由于a
具有具体类型*A
,您必须将dynamicNil
键入 - *A
。没有办法解决这个问题。
另请注意,Go没有强制转换 - 只有类型转换和断言。
编辑:也许您正在寻找reflect.Value.Set
?我不清楚。