」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在不建立實例的情況下存取Go結構體的類型?

如何在不建立實例的情況下存取Go結構體的類型?

發佈於2024-11-15
瀏覽:129

How Can I Access the Type of a Go Struct Without Creating an Instance?

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