gpt4 book ai didi

reflection - 获得反射。结构类型

转载 作者:IT王子 更新时间:2023-10-29 02:15:54 30 4
gpt4 key购买 nike

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

伪:

type MyStruct struct {
Name string
}

type := reflect.TypeOf(MyStruct)

然后是否可以制作这种类型的 slice ?

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

在数据库模型之上开发“通用”数据服务时,我想做类似的事情:

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

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

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

因为我使用的是 Mongo,所以 db.Collection 中没有可用的schema

最佳答案

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

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

您可以获得Type使用 Type.SliceOf() 元素类型是您已有的 slice 的类型, 你可以使用 reflect.MakeSlice()函数来创建这种类型的 slice 。它返回 Value , 你可以使用它的 Value.Interface()获取可在其上使用 type assertion接口(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)

输出( Go Playground ):

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

关于reflection - 获得反射。结构类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31074609/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com