在功能上,我传递的论据之一
reflect.TypeOf(Person)
其中person为struct
且字符串很少。如果另一个接受这个参数的函数,我想要实例化这个空结构,知道它的反射类型。
我试过以下
ins := reflect.New(typ) //typ is name or passed reflect.TypeOf(Person)
但这会让我回复nil
。我做错了什么?
答案 0 :(得分:2)
要告诉您的错误,我们应该看到更多代码。但这是一个如何做你想做的简单例子:
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{}
类型的值。显然它不能返回任何具体类型,只是一般的空接口。空接口不是struct
,因此您无法引用任何字段。但它可能(在你的情况下确实如此)保持*Person
的值。您可以使用Type assertion获取*Person
类型的值。