在不创建物理结构的情况下访问 Reflect.Type
在 Go 中,动态加载问题的解决方案需要访问结构的类型,而无需物理创建它们。虽然现有的解决方案要求在类型注册之前创建结构体并清零,但存在一种更有效的方法。
人们可以利用 reflect.TypeOf((*Struct)(nil)).Elem()手术。通过创建 nil 指针,可以避免空间分配。 Elem 方法从指针、数组、切片、通道和映射中检索元素类型。
例如,考虑提供的 SolutionRegistry,它允许动态加载求解器对于“欧拉计划”问题。要注册结构类型,当前的实现需要结构创建和初始化。
type DummySolution struct {
data [100 * 1024 * 1024 * 1024]uint8
}
要优化此过程,可以使用 reflect.TypeOf((*DummySolution)(nil)).Elem()DummySolution 的实例] 获取其类型:
func Register(sol Solution) {
solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem())
}
该技术有效地消除了物理结构实例化的需要,同时注册其类型以供将来动态加载。 免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3