首页 > 其他 > 详细

golang plugin传送引用方式调用插件

时间:2021-07-20 09:29:46      阅读:24      评论:0      收藏:0      [点我收藏+]

(1)编写插件

package main

import "fmt"

var Close []float64

func Sum() float64 {
var sum float64 = 0.0
for i, v := range Close {
sum += v
fmt.Printf("%v ==> v:%p close[i]:%p \n", i, &v, &Close[i])
}

return sum
}

编译:go build -buildmode=plugin
cp plugin_M1.so ../testplugin
(2)调用
package main

import (
"fmt"
"plugin"
)

func main() {
p, err := plugin.Open("plugin_M1.so")
if err != nil {
panic(err)
}

v, err := p.Lookup("Close")
if err != nil {
panic(err)
}

para := v.(*[]float64)
iniarr := make([]float64, 5)
for i := 0; i < len(iniarr); i++ {
iniarr[i] = float64(i)
fmt.Printf("test %v ==> %p\n", i, &iniarr[i])
}
*para = iniarr

v2, err := p.Lookup("Sum")
if err != nil {
panic(err)
}

fun := v2.(func() float64)
fmt.Println(fun())
}
编译输出:

jtwang@localhost:~/code/src/baocang.com/testplugin> go build
jtwang@localhost:~/code/src/baocang.com/testplugin> go run .
test 0 ==> 0xc00012e060
test 1 ==> 0xc00012e068
test 2 ==> 0xc00012e070
test 3 ==> 0xc00012e078
test 4 ==> 0xc00012e080
0 ==> v:0xc000132040 close[i]:0xc00012e060
1 ==> v:0xc000132040 close[i]:0xc00012e068
2 ==> v:0xc000132040 close[i]:0xc00012e070
3 ==> v:0xc000132040 close[i]:0xc00012e078
4 ==> v:0xc000132040 close[i]:0xc00012e080
10

golang plugin传送引用方式调用插件

原文:https://www.cnblogs.com/golinuxstudy/p/15032885.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!