获得反射。结构类型

时间:2015-06-26 13:34:57

标签: reflection go

Go中是否可以从结构本身检索reflect.Type?

伪:

type MyStruct struct {
  Name string
}

type := reflect.TypeOf(MyStruct)

之后可以制作那种类型的片段吗?

更新 我知道这个问题的reflect.TypeOf((*t1)(nil)).Elem()解决方案。我正在寻找一个更好的解决方案,因为这在我看来非常不友好。我试着解释一下情况。

在开发' generic' dataservice高于数据库模型,我想做类似的事情:

ds := NewDataService(db.Collection("MyStruct"), MyStruct)

其中DataService能够使用该模型执行查找,插入等操作。因此,我需要传递结构,以便正确使用模型(例如使用http服务器)。

第二部分是必需的,因为Find应返回找到的对象的片段。

因为我使用的是Mongo,所以 db.Collection

中没有像 schema 这样的内容

1 个答案:

答案 0 :(得分:1)

对于第一部分:它是in golang, is is possible get reflect.Type from the type itself? from name as string?

的副本

对于第二部分:之后制作该类型的切片:

您可以使用Type获取其元素类型是您已拥有的切片的Type.SliceOf(),并且您可以使用reflect.MakeSlice()函数创建此类型的切片。它会返回Value,如果您需要interface{}类型的结果,则可以使用其Value.Interface()方法获取可以使用type assertion[]MyStruct }:

tt := reflect.TypeOf((*MyStruct)(nil)).Elem()
fmt.Println(tt)

ms := reflect.MakeSlice(reflect.SliceOf(tt), 10, 20).Interface().([]MyStruct)
ms[0].Name="test"
fmt.Println(ms)

输出( Go Playground ):

main.MyStruct
[{test} {} {} {} {} {} {} {} {} {}]