当前位置: > > > > 测试时Golang“插件是使用不同版本的包构建的”
来源:stackoverflow
2024-04-29 08:12:37
0浏览
收藏
一分耕耘,一分收获!既然打开了这篇文章《测试时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”):插件是使用不同版本的包github.com/jaimeteb/chatto/fsm
构建的
我已经阅读了一些类似问题的解决方案,但还没有奏效。
这是有问题的项目:github.com/jaimeteb/chatto
解决方案
Go 插件确实很漂亮,但它们最大的缺点是构建插件和消费者二进制文件的 Go 版本必须完全匹配。这确实是阻止我更频繁地使用它们的最大原因,而是选择基于 RPC 的插件库,例如 hashicorp/go-plugin
。
如果您选择继续使用 Go 插件,那么每当您更改 Go 的版本时,甚至每当您构建使用的项目时,您都需要重新构建项目的插件。
文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《测试时Golang“插件是使用不同版本的包构建的”》文章吧,也可关注公众号了解相关技术文章。