在函数中,我传递的参数之一
reflect.TypeOf(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
}
输出(转到游乐场):
<*main.Person Value>
*main.Person
&{Name: Age:0}
&{Name:Bob Age:20}
reflect.New()
返回值reflect.Value
。返回的值Value
表示指向指定类型的新零值的指针。
您可以使用Value.Interface()
提取指针。
Value.Interface()
返回type的值interface{}
。显然,它不能返回任何具体类型,而只能返回常规的空接口。空接口不是struct
,因此您不能引用任何字段。但它可能(并且在您的情况下确实)具有的值*Person
。您可以使用Type断言来获取type的值*Person
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句