0
Help us understand the problem. What are the problem?

posted at

goでpluginパッケージを使う

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?