首頁  >  文章  >  後端開發  >  有沒有辦法以程式設計方式尋找 Golang 中介面的所有實作?

有沒有辦法以程式設計方式尋找 Golang 中介面的所有實作?

Linda Hamilton
Linda Hamilton原創
2024-11-01 06:52:02183瀏覽

  Is There a Way to Programmatically Find All Implementations of an Interface in Golang?

檢測Golang 中介面的所有實作

問題:

在Golang 中,是否可以以程式方式識別所有介面實現指定介面的結構?這將允許在運行時自動初始化和終止這些結構,而無需在程式碼中硬編碼它們的名稱。

答案:

不幸的是,簡短的答案是否定的。

說明:

Golang 是一種嚴格類型語言,這意味著連結器可以消除應用程式不使用的類型定義、方法和函數。因此,除非在程式碼中的某處引用和使用類型(例如 struct A),否則它不會包含在編譯的二進位檔案中。

此外,即使存取實現特定介面的類型的當前現有實例也是如此不可行。

替代方法:

為了實現所需的功能,另一種方法是建立一個全域映射或切片來儲存實作結構的實例介面。然後,每個結構體都可以使用在應用程式啟動時自動呼叫的 init 函數向此映射新增一個實例。然後,在必要時,應用程式可以迭代映射並在實例上呼叫所需的方法。

這種方法允許動態註冊結構,並且無需在程式碼中硬編碼其名稱。但是,如果特定類型有多個實例,則必須實作額外的機制來管理它們的註冊和登出。

以上是有沒有辦法以程式設計方式尋找 Golang 中介面的所有實作?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn