web-dev-qa-db-ja.com

パッケージを動的にロードする

実行時に特定のパッケージをロードすることは可能ですか?各プラグインが他のプラグインと同じ機能を持ちますが、動作が異なり、構成ファイルに応じていずれかをロードするプラグインが必要です。

28
Pepeluis

新しいプログラムを(たとえば、一時ディレクトリに)書き出し、 exec.Command で実行することにより、実行時に「プラグイン」パッケージを実行することを検討できます、exec.Command("go", "run", files…).Run()の線に沿ったもの

同様のコードがいくつか表示されます こちら

12
Matt Sherman

いいえ、Goは動的にロードされるライブラリをサポートしていません。

最善の方法は、プラグインを独自の実行可能ファイルとして起動し、ソケットまたはstdin/stdoutを介してプラグインと通信することです。

2017 update

この答えはもはや真実ではなく、Goは plugins をサポートするようになりました。

27
OneOfOne

Go 1.8の時点で、これに対するサポートがあります。

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

15
thomasmeadows

これらを行うだけで、構成を読み取るcodegenを作成し、パッケージが順番にロードされた基本的なgoファイルを生成して実行します。コンパイル言語は動的なロードも提供しません。ファイルは、ソケットまたはhttpとロードして通信するために必要なコードを含む一時ファイルを作成します

0
Alex Ewetumo