Golang:發現實作介面的實例
在Golang 中,通常需要對特定類型的實例或實作介面的實例執行操作一個介面特定的介面。然而,該語言的嚴格類型化在識別運行時滿足給定標準的所有實例方面提出了挑戰。
問題概述
考慮以下用例:
解決方案討論
Golang 的類型系統不允許運行時檢索所有實現介面的類型。這是因為 Go 是靜態類型的,編譯器會消除未使用的類型和方法來最佳化產生的二進位。
替代方法
另一個解決方案是維護全域將識別碼與實作介面的實例相關聯的對應或切片。每個結構體都可以透過向該全域集合添加實例來初始化自身。
例如:
<code class="go">var instMap = map[string]StartStopper type A struct {} func init() { instMap["A"] = new(A) }</code>
在啟動和終止期間,程式可以迭代全域集合並呼叫適當的方法
多個實例的擴充
如果每種類型可以存在多個實例,則每當建立新實例並刪除時,都必須更新全域集合它不再使用了。這確保了垃圾收集器的正確處理。
以上是如何在運行時動態發現實現Go介面的實例?的詳細內容。更多資訊請關注PHP中文網其他相關文章!