Подтвердить что ты не робот

Загружать пакет динамически

Можно ли загрузить определенный пакет во время выполнения? Я хочу иметь своего рода плагины, в которых каждый из них имеет те же функции, что и другие, но с другим поведением и, в зависимости от файла конфигурации, загружает один или другой.

4b9b3361

Ответ 1

Вы можете подумать о выполнении "плагиновых пакетов во время выполнения", выписав новую программу (скажем, в каталог temp) и выполнив с помощью exec.Command, что-то вдоль линий exec.Command("go", "run", files…).Run()

Здесь вы увидите похожий код .

Ответ 2

Нет, Go не поддерживает динамически загружаемые библиотеки.

Лучше всего запустить плагин как свой собственный исполняемый файл и связаться с ним через сокеты или через stdin/stdout.

Обновление

2017

Этот ответ больше не верен, теперь поддерживаем плагины.

Ответ 4

Просто сделайте это, создайте кодеген, который читает конфигурацию, генерирует основной файл go с загруженными пакетами, а затем выполняет это, компилировать языки не будет и не обеспечивает динамическую загрузку, даже дротик страдает в некотором роде, просто прочитайте свой файл конфигурации, затем создайте временный файл с необходимыми кодами для загрузки и связи с сокетами или http

Ответ 5

Я думаю, что вы ищете специальную функцию init

если вы добавите

func init() {

}

внутри пакета он будет запускать его при первом вводе пакета. Это происходит только в том же двоичном формате. Как уже говорили другие, go не поддерживает динамически загружаемые библиотеки.