Go plugin - "плагин был собран с другой версией пакета"

У меня есть приложение, которое загружает плагины при запуске (демон). В подпакете (daemon/interfaces) у меня есть несколько интерфейсов, которые должны использовать плагины для этой программы.

Это означает, что основная программа также импортируется плагином.

Я использую модули Go (как для основной программы, так и для плагина), чтобы исправить версии, и я вижу в go.mod что он использует последнюю версию основной программы для плагина.

Я могу построить оба хорошо, но когда я загружаю плагин, он выдает ошибку, говоря

 panic: plugin.Open("plugins/my-plugin"): plugin was built with a different version of package daemon/interfaces

Я использую Go 1.12.7 для сборки обоих пакетов.

1 ответ

Решение

Я исправил это, добавив оператор замены в мой плагин go.mod файл

module github.com/user/plugin

go 1.12

require (
    github.com/user/daemon v1.1.1
)

replace github.com/user/daemon v1.1.1 => ../local/path/to/daemon/

В репозитории Golang есть проблема, связанная с Github, которую вы можете найти здесь.

Судя по всему, вопрос все еще открыт. В открытии проблемы было представлено обходное решение, которое я смог использовать. Подробности смотрите в строках истории ниже.

git clone https://github.com/zimnx/central.git
git clone https://github.com/zimnx/plugins.git
cd central/
go clean -modcache
git checkout v1.0.0
go install -a
cd ../plugins/
rm go.mod 
go mod init github.com/zimnx/plugins
echo '' >> go.mod
echo 'replace github.com/zimnx/central => ../central' >> go.mod
go build -buildmode=plugin -o plugin.so
central plugin.so 

Работает на меня. Загадка еще...:) Вывод сохранен для самых любопытных.

Другие вопросы по тегам