Плагин был собран с другой версией пакета
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
Плагин Getting Error "был собран с другой версией пакета
0 ответов
У меня похожая проблема. Я обнаружил, что даже с одной и той же версией Golang и одним и тем же пакетом они могут не работать вместе и выдавать сообщение "плагин был создан с другой версией пакета". Это связано с тем, что машина сборки основного приложения и машина сборки плагина имеют разные переменные среды "GOPATH", которые будут влиять на хэш для идентификации пакета.