26 perguntas · Go
Perguntas de entrevista para Desenvolvedor Go
Perguntas para entrevistar desenvolvedores Go: goroutines e channels, interfaces, tratamento idiomático de erros e o modelo de concorrência que faz do Go o que ele é. Para separar quem escreve Go como se fosse Java de quem escreve Go como Go.
Go é uma linguagem pequena de propósito, então entrevistar para Go é menos sobre o quanto a pessoa decorou e mais sobre se ela pensa do jeito Go. O coração da linguagem é a concorrência: goroutines são baratas, channels as coordenam e o mantra da comunidade é "não comunique compartilhando memória; compartilhe memória comunicando". Um bom desenvolvedor Go explica quando usar um channel e quando usar um mutex, como evitar vazamento de goroutines respeitando o cancelamento via context, por que um channel sem buffer bloqueia até os dois lados estarem prontos e como o select multiplexa trabalho concorrente.
Além da concorrência, Go tem um idioma próprio: erros são valores que você verifica explicitamente, não exceções que você lança; interfaces são satisfeitas implicitamente e devem ser pequenas; e simplicidade é recurso, então abstrações espertas costumam ser o instinto errado. Os candidatos que valem a contratação recorrem primeiro à biblioteca padrão, tratam erros de forma deliberada e conhecem as armadilhas sutis, como uma interface nil que não é igual a nil, slices que compartilham o mesmo array por baixo ou uma variável de loop capturada numa goroutine.
Procure também consciência do runtime: o garbage collector, como o scheduler distribui goroutines entre threads do sistema operacional e como usar o pprof quando algo está lento. As perguntas abaixo vão dos fundamentos da linguagem à concorrência, ao tratamento de erros e ao runtime. Combine duas perguntas de fundamentos com um cenário de concorrência e uma conversa sobre "este serviço Go está vazando goroutines", e você vai saber rápido se a pessoa escreve Go idiomático e pronto para produção.
Fundamentos da linguagem7 perguntas
Qual a diferença entre array e slice, e como o array por baixo de um slice causa bugs surpreendentes?
O que observar: Tamanho fixo versus visão com ponteiro, tamanho e capacidade, e append ou subslices alterando dados compartilhados.
Como funcionam as interfaces em Go e por que a satisfação implícita é diferente de outras linguagens?
O que observar: Um tipo satisfaz a interface só por ter os métodos, o que permite definir interfaces pequenas no lado de quem consome.
O que é uma interface nil e por que uma interface que guarda um ponteiro nil não é igual a nil?
O que observar: A interface guarda tipo e valor; com o tipo preenchido ela não é nil, armadilha comum ao retornar erros.
Quando você usa um receiver por ponteiro e quando usa um receiver por valor num método?
O que observar: Ponteiro para alterar o estado ou evitar cópias grandes, valor para tipos pequenos e imutáveis, e consistência no mesmo tipo.
Qual a diferença entre make e new?
O que observar: make inicializa slices, maps e channels; new aloca memória zerada e devolve um ponteiro.
Como os maps se comportam e por que a ordem de iteração não é garantida?
O que observar: Ordem aleatorizada de propósito, maps não são seguros para escrita concorrente e map nil entra em pânico ao receber escrita.
O que faz o defer e em que ordem as chamadas adiadas são executadas?
O que observar: Executa ao sair da função, em ordem inversa (LIFO), com argumentos avaliados na hora do defer.
Concorrência7 perguntas
O que é uma goroutine e em que ela difere de uma thread do sistema operacional?
O que observar: Leve, com pilha pequena que cresce, e multiplexada pelo runtime sobre poucas threads do sistema.
Explique a diferença entre channel com buffer e sem buffer e quando você usa cada um.
O que observar: Sem buffer sincroniza os dois lados; com buffer desacopla até encher, e não deve ser usado para esconder problemas de projeto.
O que "compartilhe memória comunicando" significa na prática?
O que observar: Passar a posse dos dados por channels em vez de várias goroutines mexerem no mesmo dado com locks.
Quando você usaria um channel e quando usaria um sync.Mutex para proteger estado compartilhado?
O que observar: Mutex para proteger estado simples, channel para coordenar e passar trabalho, sem dogmatismo.
O que faz o select e como você coloca um timeout na leitura de um channel?
O que observar: Espera em vários channels ao mesmo tempo, com time.After ou ctx.Done() como caso de timeout.
Como você cancela uma goroutine de forma limpa e qual o papel do context.Context?
O que observar: Propagar o context, checar ctx.Done() e garantir que toda goroutine tenha um jeito de terminar.
O que é um vazamento de goroutine e como você o detectaria?
O que observar: Goroutine bloqueada para sempre num channel ou chamada, detectada pela contagem de goroutines e pelo pprof.
Erros e idiomas6 perguntas
Como o Go trata erros e por que a linguagem escolheu valores em vez de exceções?
O que observar: Erros explícitos no fluxo normal, tratados ou propagados com contexto, e a preferência por clareza ao escrever menos.
Qual a diferença entre embrulhar um erro com %w, errors.Is e errors.As?
O que observar: %w preserva o erro original, Is compara com um erro sentinela e As extrai um tipo específico da cadeia.
Quando é apropriado usar panic e quando nunca é?
O que observar: Para erros de programação ou estado impossível na inicialização, nunca para erros esperados como entrada inválida ou falha de rede.
Como é, para você, uma função Go idiomática e legível?
O que observar: Curta, com retorno antecipado, nomes claros, erro como último retorno e poucos níveis de aninhamento.
Como você organiza um serviço Go que está crescendo para que os pacotes continuem limpos?
O que observar: Pacotes por domínio, não por camada técnica genérica, uso de internal e evitar dependências circulares.
O que é a interface vazia e por que usá-la com moderação?
O que observar: any aceita qualquer tipo e joga fora a checagem do compilador; generics ou tipos concretos costumam ser melhores.
Runtime, performance e julgamento6 perguntas
Como funciona o garbage collector do Go em linhas gerais e como você reduz alocações?
O que observar: Coletor concorrente de marcação e varredura, e técnicas como pré-alocar slices, reaproveitar buffers e checar escape analysis.
Como o scheduler do Go distribui goroutines entre as threads do sistema operacional?
O que observar: Modelo G-M-P, filas locais com roubo de trabalho e GOMAXPROCS limitando os processadores lógicos.
Como você investigaria um programa Go lento com o pprof?
O que observar: Perfis de CPU, memória e goroutines, leitura de flame graph e foco no maior consumidor antes de otimizar.
O que é uma data race e como o race detector ajuda a encontrá-la?
O que observar: Acessos concorrentes sem sincronização com pelo menos uma escrita, e go test -race nos testes e no CI.
Como você escreve um teste orientado a tabela em Go e por que esse idioma é tão popular?
O que observar: Slice de casos com entrada e saída esperada, t.Run por caso, e facilidade para adicionar cenários.
Conte sobre um bug de concorrência ou problema de performance que você corrigiu num serviço Go.
O que observar: Detalhes concretos de diagnóstico e correção, e o que a pessoa mudou para prevenir casos parecidos.
Dicas para a entrevista de Desenvolvedor Go
- Aprofunde em concorrência. Channels, cancelamento e vazamento de goroutines são onde mora a experiência real em Go.
- Valorize quem escolhe um mutex em vez de um channel quando é mais simples. Go idiomático prefere clareza a esperteza.
- Observe como a pessoa trata erros. Ignorar erros retornados ou abusar de panic indica hábitos pouco idiomáticos.
- Pergunte sobre as armadilhas da interface nil e do compartilhamento de slices. Quem as conhece já foi mordido em produção.
- Valorize a simplicidade. Quem recorre por reflexo a abstrações pesadas ou a generics costuma estar brigando com a linguagem.
- Peça uma história real de vazamento de goroutine ou de data race. Como a pessoa encontrou o problema diz mais do que qualquer definição.
FAQ
Perguntas frequentes
Quais habilidades um desenvolvedor Go precisa ter?
Domínio real de concorrência (goroutines, channels, select e cancelamento via context), tratamento de erros explícito e idiomático, interfaces pequenas e implícitas e consciência do comportamento do runtime, como o garbage collector e o race detector. Acima de tudo, o instinto de manter o código simples.
Como as perguntas mudam entre Go júnior e sênior?
O júnior escreve um handler que funciona. O sênior raciocina sobre vazamento de goroutines, escolhe entre channel e mutex de forma deliberada, respeita o cancelamento via context, evita as armadilhas de interface nil e de slices e cita bugs de concorrência que corrigiu de verdade.
Concorrência é o mais importante a testar em Go?
É o grande diferencial. A sintaxe do Go se aprende num fim de semana, mas raciocinar corretamente sobre goroutines, channels e cancelamento sob carga é o que separa um desenvolvedor Go pronto para produção.
Vale aplicar um desafio técnico para vagas de Go?
Sim. Um programa concorrente pequeno, como um worker pool com cancelamento ou a correção de um vazamento de goroutine num repositório de exemplo, revela os hábitos reais. Combine o desafio com estas perguntas para avaliar o julgamento.
Como triar candidatos a desenvolvedor Go antes da entrevista?
Use perguntas de triagem na candidatura ou um teste curto de habilidades para filtrar quem entende de verdade concorrência e os idiomas da linguagem antes de gastar tempo de entrevista. Na Hireaan, as perguntas de triagem, os testes de habilidades e o ranking com IA ajudam a ver primeiro os candidatos mais fortes.
Mais bancos de perguntas de entrevista
- iOSPerguntas para Desenvolvedor iOSSaiba mais
- Java júniorPerguntas para Desenvolvedor Java júniorSaiba mais
- Java sêniorPerguntas para Desenvolvedor Java sêniorSaiba mais
- JavaScriptPerguntas para Desenvolvedor JavaScriptSaiba mais
- Node.jsPerguntas para Desenvolvedor Node.jsSaiba mais
- PHP / LaravelPerguntas para Desenvolvedor PHP / LaravelSaiba mais
Abriu a vaga de Desenvolvedor Go? Rode o processo na Hireaan.
A IA ranqueia os candidatos, você agenda as entrevistas, aplica testes de habilidades e envia a proposta, com um preço fixo para o time inteiro.
- 14 dias grátis
- Sem cartão de crédito
- Cancele quando quiser
- Conforme a LGPD
