在不建立物理結構的情況下存取Reflect.Type
在Go 中,動態載入問題的解決方案需要存取結構的類型,而不需要物理創建它們。雖然現有的解決方案要求在類型註冊之前建立結構體並清除零,但有一種更有效的方法。
可以利用 reflect.TypeOf((*Struct)(nil)).Elem()手術。透過建立 nil 指針,可以避免空間分配。 Elem 方法從指標、陣列、切片、通道和映射中檢索元素類型。
例如,考慮提供的 SolutionRegistry,它允許動態載入求解器對於「歐拉計畫」問題。要註冊結構類型,目前的實作需要結構創建和初始化。
<code class="go">type DummySolution struct { data [100 * 1024 * 1024 * 1024]uint8 }</code>
要最佳化此過程,可以使用reflect,而不是建立DummySolution 的實例.TypeOf((*DummySolution)(nil)).Elem() 取得其類型:
<code class="go">func Register(sol Solution) { solutionsRegistry.Set(reflect.TypeOf((*sol)(nil)).Elem()) }</code>
這種技術有效地消除了物理結構實例化的需要,同時註冊其類型以供將來動態加載.
以上是如何在不建立實例的情況下存取Go結構體的類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!