在不創建物理結構的情況下訪問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