标签:nal inter fail time debug模式 提示 ide mod 新版本
首先创建一个mingTest包,包中创建remainder.go文件
文件内容如下:
package main
import "fmt"
func GetRemainder() {
fmt.Println(150%500)
}
remainder.go文件作为生成动态连接库的源文件;
cd进入remainder.go所在项目的文件夹??下,使用如下命令生成文件:
go build -buildmode=plugin -o remainder.so remainder.go
注意:这里使用plugin构建模式后,package包名,由remainder包名变成了c
package remainder
import (
"fmt"
"log"
"plugin"
)
func Dial() {
// 加载插件
p, err := plugin.Open("./remainder.so")
if err != nil {
log.Fatal(err)
}
// 调用插件
GetRemainder, err := p.Lookup("GetRemainder")
if err != nil {
log.Fatal(err)
}
// 使用动态连接库的函数
fmt.Println(GetRemainder.(func(int, int) int)(150, 500))
}
package remainder
import "testing"
func TestDial(t *testing.T) {
Dial()
}
这里我使用的是Goland的Debug模式,但是出错
请看:
API server listening at: 127.0.0.1:50711
=== RUN TestDial
2019/12/23 11:11:27 plugin.Open("./remainder"): plugin was built with a different version of package runtime/internal/sys
Debugger finished with exit code 0
为什么会这样?提示我运行时的sys系统版本不一致,是因为我的macOS版本是最新版本?还是我哪里出错了?
这里贴出我参考的博客地址:
解决办法,去看权威文档还是继续调试?
用go的命令行测试工具试试:
go test dial_test.go
用go test命令我没试!突然觉得我自己哪里用的有点不对,嗯嗯!就是为什么go test时还要用Debug模式呢?
我直接用Goland的RUN试了下出结果了,看看:
=== RUN TestDial
150
--- PASS: TestDial (0.00s)
PASS
Process finished with exit code 0
不行???♂?,我还要再试试用go的命令行工具go test试试,看看:
# command-line-arguments [command-line-arguments.test]
./dial_test.go:6:2: undefined: Dial
FAIL command-line-arguments [build failed]
FAIL
??,结果就这样了!为什么?为什么会这样?
百度一下!看看为什么?因为我的Dial函数和test函数是在同一个包里面的?为什么要说它没有被定义?
简书上说,需要吧被测试文件与测试文件一同编译,也许是对的,一直用IDE也不清楚IDE在运行test时,底层为我们做了什么!
试试:
go test -v dial_test.go dial.go
这里没有把.so文件的源文件remainder.so文件也一同编译,主要考虑的是验证这个.so动态链接库是否能真正的被调用。
-v 参数是展示test的过程,如果不?-v,你看到的结果只有一个OK而已;
下面贴结果:
chenming@chenmingdeiMac mingTest % go test -v dial_test.go dial.go
=== RUN TestDial
150
--- PASS: TestDial (0.00s)
PASS
ok command-line-arguments 0.321s
这里贴出来简书的地址:https://www.jianshu.com/p/4cf4fdf33493
感谢这位作者,缩短了我调代码的时间。
补充一下包文件结构:
我做这个测试的目标:为了测试go plugin的功能,顺便熟悉怎么使用的,以后有机会多用用;
这里前期写代码是没啥问题的,就是后半段测试的时候,出了很多问题。
标签:nal inter fail time debug模式 提示 ide mod 新版本
原文地址:https://www.cnblogs.com/azi-v/p/go-plugin.html