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

Avdept

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

reflect.TypeOf(Person)

struct很少的地方。如果另一个函数接受此参数,我想实例化此空结构,知道其反映的类型。

我尝试了以下

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

但这让我回来了nil我究竟做错了什么?

icza

为了告诉您您在做什么错,我们应该查看更多代码。但这是一个简单的示例,说明如何执行所需操作:

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

反射API(对象的类型)

来自分类Dev

用反射创建对象

来自分类Dev

用反射创建对象

来自分类Dev

根据通用类型创建新对象

来自分类Dev

创建从通过反射获得的一组类型中选择的特定类型的对象

来自分类Dev

使用 Java 反射创建对象

来自分类Dev

使用nil指针定义的类型创建一个带有反射的新结构

来自分类常见问题

从泛型类中的类型参数创建新对象

来自分类Dev

TypeScript中是否可以直接从对象的键创建新类型?

来自分类Dev

使用反射检索对象的数据类型

来自分类Dev

Swift:检查对象的属性类型(反射)

来自分类Dev

使用通用类型对象的反射获取属性

来自分类Dev

Swift:检查对象的属性类型(反射)

来自分类Dev

从反射类型创建切片

来自分类Dev

如何创建从反射获得的类型列表

来自分类Dev

创建一个接受类型对象的通用方法并返回一个新的类型对象

来自分类Dev

仅在知道类型名称的情况下在运行时创建和操作不同类型的对象的实例

来自分类Dev

调用超类型方法会创建一个新的超类型对象吗?

来自分类Dev

调用超类型方法会创建一个新的超类型对象吗?

来自分类Dev

创建通用类型的对象

来自分类Dev

创建对象类型的变量

来自分类Dev

创建通用类型的对象

来自分类Dev

Java创建新对象

来自分类Dev

循环创建新对象

来自分类Dev

如何创建与其他对象相同类型的新对象

来自分类Dev

根据python中给定对象的类型创建一个新对象

来自分类Dev

获取枚举类型并创建该类型的列表,获取类类型并创建具有反射类型的列表

来自分类Dev

如何以简单的方式知道对象的类型?

来自分类Dev

如何知道netlogo中的对象类型?

Related 相关文章

热门标签

归档