go - 测试时Golang“插件是用不同版本的包构建的”
问题描述
我正在开发一个在启动时构建插件的项目:
func BuildPlugin(path *string) error {
buildGo := "go"
buildArgs := []string{
"build",
"-buildmode=plugin",
"-o",
filepath.Join(*path, "ext/ext.so"),
filepath.Join(*path, "ext/ext.go"),
}
cmd := exec.Command(buildGo, buildArgs...)
_, err := cmd.Output()
if err != nil {
return err
}
return nil
}
当我运行程序时,插件加载成功,但是当我运行测试时,出现以下错误:
fsm_test.go:34: plugin.Open("../examples/00_test/ext/ext"): plugin was built with a different version of package github.com/jaimeteb/chatto/fsm
我已经阅读了一些针对类似问题的解决方案,但还没有一个有效。
这是有问题的项目:github.com/jaimeteb/chatto
解决方案
Go 插件非常漂亮,但它们最大的缺点是构建插件和消费者二进制文件的 Go 版本必须完全匹配。这确实是让我无法更频繁地使用它们的最大原因,而是选择了基于 RPC 的插件库,例如hashicorp/go-plugin
.
如果您选择继续使用 Go 插件,则无论何时更改 Go 的版本,甚至可能在构建您的消费项目时,都需要重新构建项目的插件。
推荐阅读
- python - Splunk 使用 Python SDK 将 GCP 中的 csv 加载到 KVStore 查找中
- react-native - React Native datetimepicker 问题。在这段代码中为什么 Platform.OS==='ios'?true:false?
- google-apps-script - 用于复制和粘贴新的谷歌表单回复的脚本
- python - GNU Radio Companion——在流程图关闭之前记录一条消息
- matlab - 如何在 MATLAB 中制作 3 维数组的曲面图?
- angular - NgRx - 在 ngOnInit 中多次分派操作
- php - PhpSpreadsheet:使用嵌套循环填充电子表格的算法永远不会到达最外层循环的最后一次迭代
- mysql - Django比较模型和mysql查询之间的数据
- swift - 在tableview中放置collectionview时如何设置约束
- python - 尝试将字符串和整数相乘时出现问题