🟢 Лёгкий · 1 очк. Инструменты сборки
Что дает CGO_ENABLED=0 при сборке Go-приложения?
A Отключает сборщик мусора
B Создает полностью статический бинарник без зависимости от C-библиотек
C Отключает оптимизации
D Запрещает использование unsafe
Объяснение вопроса

CGO_ENABLED=0 отключает CGo - механизм вызова C-кода из Go. Результат: полностью статический бинарник, не зависящий от libc и других C-библиотек.

Зачем это нужно:

  • Минимальные Docker-образы: можно использовать FROM scratch или distroless (размер образа ~5-10 МБ вместо 700+ МБ)
  • Переносимость: бинарник работает на любом Linux без установленных библиотек
  • Безопасность: меньше поверхность атаки (нет libc, нет CVE в системных библиотеках)
# Типичный Dockerfile для Go
FROM golang:1.23 AS builder
WORKDIR /app
COPY . .
RUN CGO_ENABLED=0 go build -o /myapp

FROM scratch
COPY --from=builder /myapp /myapp
ENTRYPOINT ["/myapp"]

Некоторые пакеты (например, net) по умолчанию используют CGo для DNS. С CGO_ENABLED=0 Go переключается на чистую Go-реализацию.

🧠Квиз 🏆Лидеры 🎯Собесед. 📖Вопросы 📚База зн.