Go Plugin
- lambda関数を共通化できるlambda layerがPluginで作る必要があるみたいなので調べました
- lambdaでなければ、git submoduleとかのほうが使い勝手が良さそう
- Pluginだとローカルファイルとして用意してあげないといけないから
Plugin側
サンプル
package main
import "fmt"
var V int
func F() { fmt.Printf("Hello, number %d\n", V) }
ビルド
-
-buildmode=plugin
をつけて、.so
でビルドする - おそらく、カレントディレクトリでimport pluginをしていないファイルがプラグインとして認識されてビルドされる
GOOS=linux go build -buildmode=plugin -o plugin.so
呼び出し側
サンプル
package main
import "plugin"
func main() {
p, err := plugin.Open("plugin.so")
if err != nil {
panic(err)
}
v, err := p.Lookup("V")
if err != nil {
panic(err)
}
f, err := p.Lookup("F")
if err != nil {
panic(err)
}
*v.(*int) = 7
f.(func())() // prints "Hello, number 7"
}
実行
go run main.go
出力
Hello, number 7
参考
https://pkg.go.dev/plugin
https://zenn.dev/izumin/articles/4369181aa84f7b