当前位置:  开发笔记 > 编程语言 > 正文

如何将reflect.New的返回值转换回原始类型

如何解决《如何将reflect.New的返回值转换回原始类型》经验,为你挑选了1个好方法。

我正在使用反射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

为方便起见,我提供了一个游乐场.



1> JimB..:

您使用该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)

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有