Можно ли загрузить определенный пакет во время выполнения? Я хочу иметь своего рода плагины, в которых каждый из них имеет те же функции, что и другие, но с другим поведением и, в зависимости от файла конфигурации, загружает один или другой.
Загружать пакет динамически
Ответ 1
Вы можете подумать о выполнении "плагиновых пакетов во время выполнения", выписав новую программу (скажем, в каталог temp) и выполнив с помощью exec.Command, что-то вдоль линий exec.Command("go", "run", files…).Run()
Здесь вы увидите похожий код .
Ответ 2
Нет, Go не поддерживает динамически загружаемые библиотеки.
Лучше всего запустить плагин как свой собственный исполняемый файл и связаться с ним через сокеты или через stdin/stdout.
Обновление2017
Этот ответ больше не верен, теперь поддерживаем плагины.
Ответ 3
На данный момент есть поддержка для версии 1.8
Ответ 4
Просто сделайте это, создайте кодеген, который читает конфигурацию, генерирует основной файл go с загруженными пакетами, а затем выполняет это, компилировать языки не будет и не обеспечивает динамическую загрузку, даже дротик страдает в некотором роде, просто прочитайте свой файл конфигурации, затем создайте временный файл с необходимыми кодами для загрузки и связи с сокетами или http
Ответ 5
Я думаю, что вы ищете специальную функцию init
если вы добавите
func init() {
}
внутри пакета он будет запускать его при первом вводе пакета. Это происходит только в том же двоичном формате. Как уже говорили другие, go не поддерживает динамически загружаемые библиотеки.