Go 如何转换reflect.New';s将返回值返回到原始类型
我在Go 如何转换reflect.New';s将返回值返回到原始类型,go,reflection,go-reflect,Go,Reflection,Go Reflect,我在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.TypeO
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
为了方便起见,我提供了一个。您使用该方法获取一个接口{}
,然后可以使用类型断言来提取值:
t := reflect.TypeOf(Foo{})
val := reflect.New(t)
newT := val.Interface().(*Foo)
如果不需要指针,可以使用函数为类型创建零值。然后使用相同的接口和类型断言方法提取新值
t := reflect.TypeOf(Foo{})
f := reflect.Zero(t)
newF := f.Interface().(Foo)