1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

goでpluginパッケージを使う

Posted at

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

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?