亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

是否可以動態加載 Go 代碼?

是否可以動態加載 Go 代碼?

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

3 回答

?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

Go 尚不支持動態庫。Elias Naur 最近發布了一些補丁,但它們尚未經過審核,它們不太可能包含在 Go 1.2 中。您可以閱讀 Google Groups 上的討論:

據我所知,這是關于該主題的最新討論。

然而,還有另一種方法。您可以在單獨的進程中啟動您的插件,并使用net/rpc包與您的主應用程序進行通信。這也允許您動態啟動/停止/重新編譯單獨的插件,它的優點是壞插件不會使您的程序崩潰。Go 擅長網絡通信,你只需要好好利用它。

我需要編輯程序并重新編譯,

您還可以考慮編寫一個小腳本來監視當前目錄中的更改(使用 fsnotify)并執行“go build”,然后重新啟動程序。我在本地開發期間在我的一些 Web 項目中使用了這種方法,并且效果很好。我無法觀察到任何編譯時間,而且我切換和刷新瀏覽器窗口的速度非???。與 Go 相比,我的 Python 開發周期必須重新啟動解釋器,并且必須在每次更改時重新導入所有模塊(這在較大的項目中可能需要花費大量時間!)。


查看完整回答
反對 回復 2021-06-28
?
至尊寶的傳說

TA貢獻1789條經驗 獲得超10個贊

好吧,Go有一個dlopen 包——所以,至少,你現在可以將你的共享庫 (DLL) 加載到你的 Go 程序中......你可能必須用 C、C++ 編寫你的擴展或其他東西,您擁有能夠生成共享庫的工具。


查看完整回答
反對 回復 2021-06-28
  • 3 回答
  • 0 關注
  • 479 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號