Комментарии 11
Получается, проблема плагинов остро стоит только в случае бинарной дистрибуции голанг программ? Потому что если есть исходный код - его всегда можно модифицировать, дописав недостающий функционал в виде отдельных файлов. Вообще насколько часто реально голанг программы поставляются в виде бинарей? Может проблемы вовсе нет? Тот же хашикорп - прекрасно мог бы быть собран на месте, но они сделали хитрее :-) За что им честь и уважуха. Опять же накладные расходы на grpc (в конце-концов можно и через файловый сокет гонять, а не через сеть) не выглядят сильно высокими, в случае если плагин выполняет много работы.
Надеюсь, вы дочитали до конца, потому что согласен с вами почти полностью. Единственное, что хотелось бы сказать: приложения на Go не обязаны быть open source.
честно - первые две части осилил, третью уже смотрел по диагонали, TL;DR случился. Мотанул до выводов.
В каком-то смысле должны быть. Собрать приложение на Go с использованием бинарных пакетов больше не выйдет: эту возможность, насколько я помню, относительно недавно выпилили (https://github.com/golang/go/issues/28152 ?). В целом вся система сборки построена вокруг сборки из исходников.
То есть, да, есть плагины, и можно, конечно же, собрать своё приложение из исходных кодов, которые не в опенсорсе, но при этом это всё равно будет сборка из исходных кодов, а не бинарников.
Эта статья показывает, насколько Go, в общем-то, практически принуждает всё делать с открытыми исходниками, за счёт отсутствия стабильного ABI :)
Есть же вот такая библиотека https://github.com/Binject/universal, где, в том числе, реализована работа на M1 и винде.
Спасибо за ссылку - интересное решение. Только лицензия расстроила. Надо будет сравнить в аналогичных тестах.
а что не так с лицензией? GPL3.0 не понравился?
Она не нравится или не нравится, а просто ограничивает применимость в некоторых коммерческих проектах. Если вы пишете только открытое ПО ещё и получаете за это деньги, то искренне рад за вас.
Ну и так немного почитал - пока не понял - можно ли там провернуть все, что нужно - смутило то, что список аргументов для метода Call имеет тип ...uintptr, а в примере передается просто число 7 константой, но пока спишу на то, что нужно поглубже вникнуть.
Потрясающая статья! Аплодирую стоя!!! Сам как раз начал разбираться в этом вопросе - плагины и CGO. Так что ваша статья очень мне помогла! Благодарю
Сейчас появилась задача сделать приложение с плагинами (чтобы в деплое различные конфигурации создавать и разную поставку делать) благо в нашем случае нам вроде пока хватает штатного plugins
так как условия описанные автором выполняются - собирается всегда все за раз с одной версии и в одну платформу и просто уже в рантайме что-то или подгружается или нет, выгружать не требуется.
Go и плагины