
Docker & Containerization
Dockerfile, multi-stage builds, otimização de imagens, docker-compose, orquestração de containers
1Qual é a principal razão para usar um multi-stage build em uma aplicação Go?
Qual é a principal razão para usar um multi-stage build em uma aplicação Go?
Resposta
O multi-stage build permite separar o ambiente de compilação da imagem final. A etapa de build contém o SDK completo do Go (várias centenas de MB), enquanto a imagem final contém apenas o binário compilado. Isso reduz drasticamente o tamanho da imagem (de ~800MB para alguns MB) e minimiza a superfície de ataque ao eliminar ferramentas de build desnecessárias em produção.
2Qual imagem base é recomendada para uma aplicação Go em produção para minimizar o tamanho e a superfície de ataque?
Qual imagem base é recomendada para uma aplicação Go em produção para minimizar o tamanho e a superfície de ataque?
Resposta
A imagem scratch é uma imagem vazia sem sistema operacional. Go compila para binários estáticos que não precisam de libc ou outras dependências do sistema, o que permite usar scratch. Isso produz as menores imagens possíveis (alguns MB) e oferece a melhor segurança, pois não há nenhuma ferramenta ou shell explorável. Distroless e alpine são alternativas válidas, mas menos otimizadas.
3Quais flags de compilação do Go são necessárias para criar um binário compatível com uma imagem scratch?
Quais flags de compilação do Go são necessárias para criar um binário compatível com uma imagem scratch?
Resposta
CGO_ENABLED=0 desativa o cgo, forçando o Go a usar implementações pure Go para pacotes como net e os/user. Sem isso, o binário teria dependências dinâmicas com libc. GOOS e GOARCH especificam a plataforma de destino. Esses flags combinados produzem um binário totalmente estático sem dependências externas, ideal para scratch.
Como otimizar o cache das layers do Docker ao fazer o build de uma aplicação Go?
Qual é a vantagem de usar as imagens Google Distroless para Go em comparação com scratch?
+17 perguntas de entrevista
Outros temas de entrevista Go
Fundamentos de Go
Estruturas de dados em Go
Interfaces em Go
Tratamento de erros
Goroutines básicas
Channels
Go Modules
Servidor HTTP
Cliente HTTP
Codificação JSON
Database/SQL
Pacote context
Testing
Padrões de concorrência
Primitivas de sincronização
Frameworks web Go
Design de API REST
gRPC
Reflection
Gerenciamento de memória
Otimização de desempenho
Generics
Go Design Patterns
Microservices
Segurança e autenticação
Kubernetes Basics
Go Avançado
Desenvolvimento de CLI
Domine Go para sua proxima entrevista
Acesse todas as perguntas, flashcards, testes tecnicos, exercicios de code review e simuladores de entrevista.
Comece gratis