正如標題所說,我想根據僅在運行時可用的信息動態加載 Go 包(或不加載)。目標是允許用戶通過添加新本機腳本命令的自定義包來擴展程序。目前,每次我添加新命令或想要禁止某些命令時,我都需要編輯程序并重新編譯,而如果我可以制作某種 dll 或類似的東西,那么我可以創建一個“導入”腳本命令來搜索和加載一個命名的命令庫。出于好奇,有問題的程序是基于自定義命令的腳本庫,我用于各種事情。我提前做了一些搜索,結果看起來不太好,但我找不到明確的否。
3 回答

BIG陽
TA貢獻1859條經驗 獲得超6個贊
Go 尚不支持動態庫。Elias Naur 最近發布了一些補丁,但它們尚未經過審核,它們不太可能包含在 Go 1.2 中。您可以閱讀 Google Groups 上的討論:
https://groups.google.com/d/topic/golang-nuts/o0VTTqC8hOU/discussion
https://groups.google.com/d/topic/golang-nuts/P05BDjLcQ5k/discussion
據我所知,這是關于該主題的最新討論。
然而,還有另一種方法。您可以在單獨的進程中啟動您的插件,并使用net/rpc包與您的主應用程序進行通信。這也允許您動態啟動/停止/重新編譯單獨的插件,它的優點是壞插件不會使您的程序崩潰。Go 擅長網絡通信,你只需要好好利用它。
我需要編輯程序并重新編譯,
您還可以考慮編寫一個小腳本來監視當前目錄中的更改(使用 fsnotify)并執行“go build”,然后重新啟動程序。我在本地開發期間在我的一些 Web 項目中使用了這種方法,并且效果很好。我無法觀察到任何編譯時間,而且我切換和刷新瀏覽器窗口的速度非???。與 Go 相比,我的 Python 開發周期必須重新啟動解釋器,并且必須在每次更改時重新導入所有模塊(這在較大的項目中可能需要花費大量時間!)。
- 3 回答
- 0 關注
- 479 瀏覽
添加回答
舉報
0/150
提交
取消