1.7Kпросмотров
24 декабря 2025 г.
Score: 1.9K
⚙️ Go + cgo + Docker: как вернуть воспроизводимую кросс-сборку Хороший практичный разбор про то, что происходит с Go-проектом после появления cgo. Формально go build всё ещё работает, но на практике каждый разработчик начинает жить в своём окружении с набором флагов, версий библиотек и локальных костылей. В статье простой, но рабочий выход: всю сборку вынести в Docker и рассматривать его как единое билд-окружение. Внутри контейнера явно задаются CC, CXX, AS и ldflags для каждой пары OS/arch, что позволяет из одного места собирать Linux, macOS и Windows бинарники, включая статическую линковку там, где это возможно. Важно, что Docker используется без Dockerfile — берётся официальный golang-образ и напрямую запускается bash-скрипт. Это делает процесс легко воспроизводимым как для команды, так и для пользователей open source-проекта. Подход не самый быстрый и не самый изящный, но он позволяет сделать локальную сборку идентичной продакшену, а cgo перестаёт быть источником проблем. @go_for_devs