gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 01:21:36 27 4
gpt4 key购买 nike

我在 go 中使用反射,我注意到下面表达的奇怪之处:<​​/p>

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

我提供了一个 go playground为了方便。

最佳答案

您使用 Value.Interface方法获取接口(interface){},然后您可以使用类型断言来提取值:

t := reflect.TypeOf(Foo{})
val := reflect.New(t)
newT := val.Interface().(*Foo)

如果你不需要指针,你可以使用 reflect.Zero函数为该类型创建一个零值。然后,您使用相同的接口(interface)和类型断言方法来提取新值。

t := reflect.TypeOf(Foo{})
f := reflect.Zero(t)
newF := f.Interface().(Foo)

关于go - 如何将 reflect.New 的返回值转换回原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34098936/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com