是否可以在 Go 中检索反射。从结构本身键入?
伪:
type MyStruct struct {
Name string
}
type := reflect.TypeOf(MyStruct)
之后有可能制作这种类型的切片吗?
更新:我知道这个问题reflect.TypeOf((*t1)(nil)).Elem()
解决方案。我正在寻找更好的解决方案,因为在我看来这很不友好。我会尝试解释情况。
在开发数据库模型之上的"通用"数据服务时,我想做如下的事情:
ds := NewDataService(db.Collection("MyStruct"), MyStruct)
其中,数据服务能够使用该模型进行查找,插入等。因此,我需要传递结构,以便可以正确使用模型(例如使用 http 服务器(。
需要第二部分,因为Find
应该返回找到的对象切片。
因为我使用的是 Mongo,所以数据库中没有可用的模式。收集
对于第一部分:它是 golang 中的重复,是可能的 得到反映.从类型本身键入?从名称作为字符串?
对于第二部分:之后制作该类型的切片:
您可以使用 Type.SliceOf()
获取元素类型为已有类型的切片的Type
,并且可以使用 reflect.MakeSlice()
函数创建此类类型的切片。它返回一个Value
,你可以使用它的Value.Interface()
方法来获取一个interface{}
,如果你需要将结果作为一种[]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} {} {} {} {} {} {} {} {} {}]