Reflection 结构类型
在Go中是否可以从结构本身检索reflect.Type 伪:Reflection 结构类型,reflection,go,Reflection,Go,在Go中是否可以从结构本身检索reflect.Type 伪: type MyStruct struct { Name string } type := reflect.TypeOf(MyStruct) 有没有可能在事后制作出这种类型的切片 更新: 我知道这个问题的reflect.TypeOf((*t1)(nil)).Elem()解决方案。我正在寻找一个更好的解决办法,因为我觉得这很不友好。我会尽力解释一下情况 在数据库模型之上开发“通用”数据服务时,我想做如下工作: ds := NewD
type MyStruct struct {
Name string
}
type := reflect.TypeOf(MyStruct)
有没有可能在事后制作出这种类型的切片
更新:
我知道这个问题的reflect.TypeOf((*t1)(nil)).Elem()
解决方案。我正在寻找一个更好的解决办法,因为我觉得这很不友好。我会尽力解释一下情况
在数据库模型之上开发“通用”数据服务时,我想做如下工作:
ds := NewDataService(db.Collection("MyStruct"), MyStruct)
其中DataService能够使用该模型进行查找、插入等操作。因此,我需要传递结构,以便能够正确使用模型(例如http服务器)
第二部分是必需的,因为Find
应该返回找到的对象的切片
因为我使用的是Mongo,所以在db.Collection中没有类似的模式可供使用:它是 对于第二部分:之后制作该类型的切片: 您可以通过使用获得其元素类型与您已有类型相同的切片的类型,并且可以使用函数创建此类类型的切片。它返回一个,您可以使用它的方法获得一个
接口{}
,如果需要将结果作为[]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)
输出():
可能重复我更新了问题
main.MyStruct
[{test} {} {} {} {} {} {} {} {} {}]