【发布时间】:2019-04-25 02:51:32
【问题描述】:
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
虚拟机2:
plugin.go
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func Handler() gin.HandlerFunc {
return func(c *gin.Context) {
c.JSON(200, "Success")
}
}
去构建 -buildmode=plugin plugin.go
Getting Error "插件是用不同版本的包构建的
【问题讨论】:
-
您收到该错误是有原因的。尝试删除插件并重建它们。还要确保如果他们在你的主应用中使用“共享”包,它们也必须匹配!
-
是的,我有共享包,即 Go-Gin。那么我必须做些什么才能让它发挥作用呢?
-
您必须使用相同版本的共享包。例如。如果您获得共享包,则构建插件,然后更新共享包并构建主应用程序,这将导致您看到的错误。每当共享包发生变化时,您都必须重新构建插件和主应用程序。
-
共享包也有相同的版本并重建。但还是同样的问题
-
您是否有机会出售这些软件包?供应商包与非供应商包不同,即使来源完全匹配。