Go 言語の人気とアプリケーション シナリオの継続的な拡大により、ますます多くの企業や開発者が開発に Go 言語を採用し始めています。その中でも、Go プラグインの作成が話題になっています。 Go プラグインは、実行時に Go プログラムにロードしてプログラムを拡張し、機能を強化できる独立したバイナリ ファイルです。この記事では、golangプラグインの開発方法を紹介します。
1. Go プラグインを理解する
Go プラグインは、Go 言語によって公式に提供されている拡張メカニズムであり、プログラムの実行中にバイナリ ファイルを動的にロードすることができます。プログラムを拡張し、機能を強化します。 Go プラグインは、ソース コードをコンパイルせずに、独立してバイナリにコンパイルし、実行時に動的にロードできます。 Go プラグインには通常 1 つ以上の関数が含まれており、エクスポートされた関数のみが許可されます。
2. プラグインのコンパイル
Go プラグインは、通常の Go プログラムと同様にコンパイルできます。-buildmode
パラメーターを使用してプラグイン モードを指定するだけです。コンパイル中。例:
go build -buildmode=plugin plugin.so plugin.go
このうち、plugin.so
は出力プラグイン ファイル名、plugin.go
はプラグインを含む Go ソース ファイルです。コードで。コンパイルが成功すると、別の .so
ファイルが生成されます。
3. プラグインのエクスポート関数
Go プラグインは、メイン プログラムが呼び出す 1 つ以上の関数をエクスポートできます。関数をエクスポートする方法は通常の関数と同じで、関数の前に export
キーワードを追加するだけです。
package main import ( "log" ) // 普通函数 func Add(a, b int) int { return a + b } // 导出函数 // 必须符合如下形式:func 函数名(参数类型) 返回值类型 func ExportAdd(a, b int) int { log.Println("调用了插件函数ExportAdd") return Add(a, b) }
注: エクスポートされた関数の命名規則では、最初の文字が大文字になり、エクスポートできます。
4. プラグインのロード
Go プログラムは、plugin.Open
関数を通じてプラグインをロードでき、*plugin.Plugin を返します。
型構造体。これを通じて、プラグイン内のエクスポートされた関数を呼び出すことができます。以下は、plugin.Open
関数を使用してプラグインをロードして呼び出すサンプル コードです:
package main import ( "log" "plugin" ) func main() { // 加载插件 p, err := plugin.Open("./plugin.so") if err != nil { log.Fatalf("打开插件失败:%v ", err) } // 查找插件中的导出函数 add, err := p.Lookup("ExportAdd") if err != nil { log.Fatalf("查找导出函数失败:%v ", err) } // 调用导出函数 result := add.(func(int, int) int)(1, 2) log.Println("Result: ", result) }
5。では、Linux、macOS、FreeBSD、および Windows オペレーティング システムのみをサポートします。
Go プラグインは個別にコンパイルされたバイナリであるため、プラグイン コードは同じパッケージに含める必要があり、複数のパッケージ内のファイルにまたがることはできません。
以上がgolang プラグインの開発方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。