Что записано в бинарнике: инвентаризация версий и разбор инцидента
Начиная с Go 1.18 каждый бинарник несёт в себе паспорт: версию тулчейна, путь и версию главного модуля, полный список зависимостей с их версиями и контрольными суммами, флаги сборки и — если сборка шла из рабочего дерева с системой контроля версий — ревизию, время коммита и признак незакоммиченных правок. Читается это снаружи командой go version -m файл и изнутри через debug.ReadBuildInfo. Практическая ценность появляется в двух ситуациях. Разбор инцидента: вместо вопроса «какая версия там развёрнута» есть точный ответ, включая ревизию и признак грязной сборки. Проверка на уязвимость: govulncheck умеет работать по бинарнику, то есть проверять то, что реально запущено, а не то, что лежит в репозитории. Из этого же списка получают состав программного обеспечения для аудита. Главная эксплуатационная тонкость: штампы системы контроля версий появляются, только если .git доступен при сборке, — типовой .dockerignore их отключает.