Goのpluginパッケージの基本
.soファイルを作成し、plugin.Open / Lookupを使います。
「Goのpluginパッケージの基本」はCoddyKit上の無料Go Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはGo Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Go Academyコースには全4レッスンが含まれています。
Goのpluginパッケージとは
pluginパッケージ(Go 1.8以降)を使用すると、コンパイル済みの.so共有ライブラリを実行時に読み込み、そこからエクスポートされた関数や変数を呼び出せます。
プラグインのビルド
-buildmode=pluginを指定すると、Goファイルをプラグインとしてコンパイルできます:
// greeter/greeter.go
package main
func Greet(name string) string { return "Hello, " + name }プラグインの読み込み
.soファイルを読み込み、エクスポートされたシンボルを検索します:
p, err := plugin.Open("./greeter.so")
if err != nil { log.Fatal(err) }
sym, err := p.Lookup("Greet")
if err != nil { log.Fatal(err) }
greet, ok := sym.(func(string) string)
if !ok { log.Fatal("wrong type") }
fmt.Println(greet("World"))プラグインの制約
プラグインとホストがインポートするすべてのパッケージは、同一バージョンでなければなりません。プラグインにはpackage mainが必要です。読み込んだプラグインをアンロードすることはできません。
シンボルの型
plugin.Lookupはanyを返します。これを、期待する関数シグネチャまたは変数型に型アサーションします。不一致があると、実行時にパニックが発生します。
プラットフォームの制限
pluginパッケージはLinuxとmacOSで動作しますが、WindowsやCGO_ENABLED=0では動作しません。また、プラグインターゲットへのクロスコンパイルもサポートしていません。
バージョン互換性
プラグインとホストは、同じGoバージョン、および共有するすべてのパッケージの同じバージョンでコンパイルする必要があります。バージョンが一致しないと、プラグインの読み込みに失敗します。
ユースケース
プラグインは、ユーザーが提供するハンドラーを使用するコンテンツ管理システム、交換可能なストレージバックエンドを備えたデータベース、ホストを再コンパイルせずに実行時に拡張機能を読み込む必要があるアプリケーションに適しています。
代替手段
より柔軟性が必要な場合は、ネイティブプラグインの代わりに、RPCベースのプラグイン(HashiCorp go-plugin)、WebAssemblyモジュール、またはホストに組み込んだスクリプト言語(Lua、Starlark)を使用します。
プラグインのデバッグ
プラグインのシンボルが見つかりませんか?正しいpackage mainであること、シンボルがエクスポートされていること(先頭が大文字であること)、ビルドタグとモジュールバージョンが一致していること、正しいプラットフォームであることを確認してください。
プラグインの読み込みは一方向
一度プラグインを読み込むと、アンロードすることはできません。読み込まれたすべてのプラグインがプロセスの存続期間中アクティブであり続けることを前提にシステムを設計してください。
クイックチェック
HashiCorp go-pluginと比較した場合、Goのpluginパッケージの主な制限は何ですか?
まとめ:Go pluginパッケージ
重要なポイント:
- -buildmode=pluginでビルドし、plugin.Openで読み込みます
- plugin.Lookupはanyを返すため、期待する型に型アサーションします
- Linux/macOSのみ対応、バージョンの完全一致が必要、アンロードはできません
- クロスプラットフォームの柔軟性が必要な場合は、go-plugin(RPCベース)を優先します
よくある質問
「Goのpluginパッケージの基本」レッスンは無料ですか?
はい。「Goのpluginパッケージの基本」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Go Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Go Academyコースには全4レッスンが含まれています。
「Goのpluginパッケージの基本」で何を学びますか?
.soファイルを作成し、plugin.Open / Lookupを使います。 ブラウザで直接実行するハンズオンコードでGo Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Go Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのGo Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Goのpluginパッケージの基本」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このGo Academyレッスンでコードを書いて実行できますか?
はい。すべてのGo Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Goのpluginパッケージの基本
- プラグインインターフェースの設計
- 動的ロードとシンボル
- 代替手段:HashiCorp go-plugin