gpt4 book ai didi

reflection - 创建知道反射类型的新对象

转载 作者:IT王子 更新时间:2023-10-29 01:42:40 26 4
gpt4 key购买 nike

在函数中,我传递的参数之一

reflect.TypeOf(Person)

person 是带有几个字符串的 struct。如果另一个函数接受这个参数,我想实例化这个空结构,知道它的反射类型。

我试过跟随

ins := reflect.New(typ)  //typ is name or passed reflect.TypeOf(Person)

但这会返回 nil。我做错了什么?

最佳答案

为了说明您做错了什么,我们应该查看更多您的代码。但这是一个如何做你想做的简单例子:

type Person struct {
Name string
Age int
}

func main() {
p := Person{}

p2 := create(reflect.TypeOf(p))

p3 := p2.(*Person)
p3.Name = "Bob"
p3.Age = 20
fmt.Printf("%+v", p3)
}

func create(t reflect.Type) interface{} {
p := reflect.New(t)
fmt.Printf("%v\n", p)

pi := p.Interface()
fmt.Printf("%T\n", pi)
fmt.Printf("%+v\n", pi)

return pi
}

输出(Go Playground):

<*main.Person Value>
*main.Person
&{Name: Age:0}
&{Name:Bob Age:20}

reflect.New()返回值 reflect.Value .返回的 Value 表示指向指定类型的新零值的指针。

您可以使用 Value.Interface()提取指针。

Value.Interface() 返回类型为 interface{} 的值。显然它不能返回任何具体类型,只是一般的空接口(interface)。空接口(interface)不是struct,因此您不能引用任何字段。但它可能(在您的情况下确实如此)包含 *Person 的值。您可以使用 Type assertion获取 *Person 类型的值。

关于reflection - 创建知道反射类型的新对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30636022/

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