В Go нет встроенного ограничения на размер бинарника. Теоретический предел это ресурсы машины, на которой идёт компиляция: свободное место на диске и доступная память.
Размер бинарника растёт из-за нескольких вещей:
Статическая линковка. Go по умолчанию собирает всё в один файл — рантайм, стандартная библиотека, все зависимости. Никаких внешних
.so или .dll. Это удобно при деплое, но увеличивает размер даже у простой программы.Встроенные ресурсы. Через
//go:embed можно упаковать в бинарник статику, шаблоны, миграции. Добавили папку с фронтендом — бинарник вырос на её размер.Отладочная информация. По умолчанию Go включает в бинарник DWARF-символы и таблицы имён. Это нужно для профилировщика и стектрейсов, но добавляет вес.
Если размер важен, его можно уменьшить флагами линковщика:
go build -ldflags="-s -w" -o app .
-s убирает таблицу символов, -w отключает DWARF. Бинарник становится меньше на 20–30%, но отладка по нему будет затруднена.Дополнительно можно прогнать через
upx — утилита сжимает исполняемый файл, он распаковывается уже в памяти при запуске.🐸Библиотека Go для собеса