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 这样的内容答案 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} {} {} {} {} {} {} {} {} {}]