問題:
在Golang 中,是否可以以程式方式識別所有介面實現指定介面的結構?這將允許在運行時自動初始化和終止這些結構,而無需在程式碼中硬編碼它們的名稱。
答案:
不幸的是,簡短的答案是否定的。
說明:
Golang 是一種嚴格類型語言,這意味著連結器可以消除應用程式不使用的類型定義、方法和函數。因此,除非在程式碼中的某處引用和使用類型(例如 struct A),否則它不會包含在編譯的二進位檔案中。
此外,即使存取實現特定介面的類型的當前現有實例也是如此不可行。
替代方法:
為了實現所需的功能,另一種方法是建立一個全域映射或切片來儲存實作結構的實例介面。然後,每個結構體都可以使用在應用程式啟動時自動呼叫的 init 函數向此映射新增一個實例。然後,在必要時,應用程式可以迭代映射並在實例上呼叫所需的方法。
這種方法允許動態註冊結構,並且無需在程式碼中硬編碼其名稱。但是,如果特定類型有多個實例,則必須實作額外的機制來管理它們的註冊和登出。
以上是有沒有辦法以程式設計方式尋找 Golang 中介面的所有實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!