Go での動的パッケージのロード
通常、Go では実行時に特定のパッケージをロードすることはできません。この言語は現在、動的にロードされるライブラリをサポートしていないため、プログラムを実行する前にパッケージをメインの実行可能ファイルにコンパイルする必要があります。
ただし、同様の目標を達成するために検討できる代替アプローチがあります。
実行可能ファイルとしてのプラグイン
オプションの 1 つは、プラグインごとに個別の実行可能ファイルを作成することです。同じインターフェースを持ちますが、実装は異なります。その後、これらのプラグインを個別のプロセスとして開始し、ソケットまたは標準入出力 (stdin/stdout) を通じて通信することで、必要に応じてこれらのプラグインをロードできます。
Go プラグイン (Go 1.8 以降)
2017 年に、Go はプラグインのサポートを導入しました。プラグインを使用すると、実行中のプログラムにコードを動的にロードおよびアンロードできます。この機能は現在、Linux と macOS でサポートされています。
Go プラグインを使用するには、プラグイン コードと登録関数を含む共有ライブラリ (.so) を作成する必要があります。その後、プラグイン パッケージを使用してプラグインをプログラムにロードできます。
Go でプラグインをロードして使用する方法の例を次に示します。
package main import ( "fmt" "plugin" ) func main() { // Load the plugin library p, err := plugin.Open("my_plugin.so") if err != nil { panic(err) } // Get the registration function registerFunc, err := p.Lookup("Register") if err != nil { panic(err) } // Register the plugin's functions register := registerFunc.(func()) register() // Call a function from the plugin callFunc, err := p.Lookup("CallFunction") if err != nil { panic(err) } output, err := callFunc.(func()) if err != nil { panic(err) } fmt.Println(output) }
以上がGo で動的パッケージの読み込みを実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。