Размер бинарника Go: откуда он берётся и что реально помогает
Пустая программа на Go весит около полутора мегабайт, и это не «раздутость», а плата за модель языка: в бинарник входят рантайм со сборщиком мусора и планировщиком, таблицы типов для рефлексии, отладочная информация и вся стандартная библиотека в объёме, который реально используется. Компоновщик уже отбрасывает недостижимый код, поэтому «убрать лишние импорты» помогает только если импорт тянул за собой большую подсистему. Что действительно уменьшает файл: -ldflags '-s -w' убирает таблицу символов и отладочную информацию — примерно четверть; -trimpath немного сокращает пути; отказ от рефлексии над всеми типами позволяет компоновщику выбросить больше. Самый заметный эффект дают не флаги, а зависимости: одна библиотека вроде клиента облака или gRPC добавляет десятки мегабайт. Инструмент для разбора — go tool nm и go-size-analyzer. Сжатие упаковщиком вроде UPX уменьшает файл втрое, но замедляет старт и вызывает ложные срабатывания антивирусов.