得到反思.结构类型



是否可以在 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} {} {} {} {} {} {} {} {} {}]

相关内容

  • 没有找到相关文章