簡體   English   中英

在Go中開發插件?

[英]Develop plugins in Go?

可以動態運行以用於基於插件的應用程序嗎?

在eclipse中,我們可以創建一些Eclipse可以動態運行的插件。

圍棋中可以做同樣的事情嗎?

我認為這是兩個不同的問題:

  1. 有動態負荷
  2. 有插件

第一個是沒有:Go程序是靜態鏈接的,這意味着你不能將代碼添加到正在運行的程序中。 這也意味着你必須編譯程序讓它集成插件。

幸運的是,您可以像在大多數語言中一樣定義一個接受Go中插件的程序,而使用接口和快速編譯的Go不會使該任務變得困難。

以下是兩種可能的方法:

解決方案1:插件集成在主程序中

與Eclipse插件類似,我們可以通過簡單地重新編譯程序將“插件”集成到主程序存儲器中。 從這個意義上講,我們可以說數據庫驅動程序是插件。

這可能不像在Java中那么簡單,因為您必須重新編譯,並且您必須在代碼的某些方面導入“插件”(請參閱如何為數據庫驅動程序完成 ),但是,考慮到Go關於目錄和導入的標准化,使用簡單的makefile導入插件並重新編譯應用程序似乎很容易處理。

考慮到Go中編譯的簡易性和速度,以及包結構的標准化,我認為這是一個非常可行的解決方案。

解決方案2:單獨的過程

在Go中進行通信和處理異步調用尤其容易。 這意味着您可以基於通過命名管道(或任何網絡解決方案)進行的許多流程通信來定義解決方案。 請注意,Go中有一個rpc包 對於大多數程序而言,這可能足夠有效,並且主程序將能夠啟動和停止插件進程。 這很可能覺得類似於你有什么在Eclipse中的內存空間保護的額外好處。

來自編寫幾個Eclipse插件的人的最后一個注釋:你不要那么亂; 把事情簡單化。

Go 1.8支持插件(將於2017年2月發布。)

https://tip.golang.org/pkg/plugin/

正如已經說過的破壞,在運行時加載包是不可能的。

在未來(或今天有限制),可能有像go-eval這樣的項目具有此功能,這是“Go的解釋器的開始”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM