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)