Флаги компоновщика: версия в бинарнике и уменьшение размера
Флаг -ldflags передаёт параметры компоновщику, и на практике используют два. -X импорт.переменная=значение подставляет значение в строковую переменную уровня пакета на этапе сборки — так в бинарник попадают версия, хеш коммита и время сборки без генерации кода. Работает это только со строками и только с переменными, а не константами; путь должен быть полным, включая путь модуля. -s -w убирают таблицу символов и отладочную информацию, уменьшая файл примерно на четверть; расплата — бесполезные трассировки в отладчике и невозможность нормально снять профиль, поэтому в проде их применяют осознанно. Есть и третий вариант получения версии, который часто лучше: начиная с Go 1.18 тулчейн сам записывает данные системы контроля версий в бинарник, и они читаются через debug.ReadBuildInfo без всяких флагов. Для сборки в контейнере это важно: без каталога .git штампы не появятся.