插件是使用其他版本的软件包构建的

时间:2018-11-22 12:05:36

标签: go gin-gonic

VM1和VM2都具有1.11.1版。

我的场景:

VM1:

main.go

package main

func startGin() *gin.Engine {
    gin.SetMode(gin.ReleaseMode)
    router := gin.New()
    v1:= router.Group("/v1")

    all_plugins, err := filepath.Glob("plugins/*.so")
    if err != nil {
       panic(err)
    }

    for _, filename := range all_plugins {
        p, err := plugin.Open(filename)
        if err != nil {
            panic(err)
       }
       handler, err := p.Lookup("Handler")
       if err != nil {
           panic(err)
       }
       v1.GET("/sample", handler.(func() gin.HandlerFunc)())
    }
    return router
}

func main() {
    router := startGin()
    server := &http.Server{Handler: router}
    ln, err := net.Listen("tcp4", ":8080")
    if err != nil {
        log.Error.Printf("error during startup", err)
    }
    server.Serve(tcpKeepAliveListener{ln.(*net.TCPListener)})
}

开始构建main.go

VM2:

plugin.go

package main

import (
 "fmt"
 "github.com/gin-gonic/gin"
)

func Handler() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.JSON(200, "Success")
    }
}

go build -buildmode = plugin plugin.go

“获取错误”插件是使用其他版本的软件包构建的

1 个答案:

答案 0 :(得分:0)

我有类似的问题。我发现即使使用相同版本的Golang和相同的软件包,它们也可能无法一起工作,并发出“插件是使用不同版本的软件包构建的”消息。这是因为主应用程序的构建机器和插件的构建机器具有不同的环境变量“ GOPATH”,这会影响哈希以识别软件包。