登录
首页 >  Golang >  Go问答

测试时Golang“插件是使用不同版本的包构建的”

来源:stackoverflow

时间:2024-04-29 08:12:37 247浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《测试时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“插件是使用不同版本的包构建的”》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>