CGO: что он включает, чем за это платят и как выключить
CGO — механизм вызова C-кода из Go, и включён он по умолчанию при сборке под родную платформу. Даже если вы не писали ни строчки на C, он может оказаться задействован: стандартная библиотека использует его для разрешения имён и поиска пользователей через системные библиотеки. Плата за CGO велика и многослойна. Пропадает простая кросс-компиляция: нужен кросс-компилятор C. Бинарник перестаёт быть статическим и начинает зависеть от системных библиотек — отсюда классическая ошибка запуска в scratch и расхождение между сборкой на glibc и запуском на musl в Alpine. Каждый вызов в C стоит дороже обычного и занимает поток целиком, а долгий C-вызов планировщик Go не вытесняет. Наконец, теряются проверки: детектор гонок и сборщик мусора не видят, что происходит в C. Отсюда практика: CGO_ENABLED=0 по умолчанию, а включать осознанно, ради конкретной библиотеки.