我正在使用反射go
,我注意到下面表达的奇怪之处:
package main import ( "log" "reflect" ) type Foo struct { a int b int } func main() { t := reflect.TypeOf(Foo{}) log.Println(t) // main.Foo log.Println(reflect.TypeOf(reflect.New(t))) // reflect.Value not main.Foo }
我怎样才能将reflect.Value
背面转换为main.Foo
?
为方便起见,我提供了一个游乐场.
您使用该Value.Interface
方法获取interface{}
,然后您可以使用类型断言来提取值:
t := reflect.TypeOf(Foo{}) val := reflect.New(t) newT := val.Interface().(*Foo)
如果您不想要指针,可以使用该reflect.Zero
函数为该类型创建零值.然后使用相同的接口并键入断言方法来提取新值.
t := reflect.TypeOf(Foo{}) f := reflect.Zero(t) newF := f.Interface().(Foo)