linguagem
Go
Go em entrevista testa o modelo de concorrência: o que é uma goroutine e como ela difere de uma thread do SO, como channels coordenam sem lock compartilhado ('não comunique compartilhando memória; compartilhe memória comunicando'), quando usar `sync.Mutex` mesmo assim, e por que o erro é um valor de retorno e não uma exceção.
Tópicos por senioridade
Perguntas mais cobradas
ver todas →- Médio
Goroutine x thread do sistema operacional
Goroutine: leve, pilha que cresce, agendada pelo runtime (M:N sobre threads do SO). Thread do SO: pesada, pilha fixa de MB, agendada pelo kernel.
- Difícil
Channels ou mutex: qual usar
Channel: transferir propriedade de dado / orquestrar (worker pool, cancelamento). Mutex: proteger estado compartilhado que fica no lugar (contador, cache).
- Médio
Erro como valor de retorno em Go
Erro é `(valor, error)` tratado pelo chamador: fluxo explícito e local, difícil ignorar sem aparecer. Crítica: verboso e sem força do compilador; `%w` preserva contexto.
- Médio
Slice x array e o compartilhamento de backing array
Array: tamanho no tipo, copiado. Slice: header (ptr,len,cap) sobre um backing array; fatiar não copia. Dois slices sobrepostos → mutação/append de um afeta o outro. Use `copy()` ou `s[a:b:b]`.
- Médio
`defer`: ordem, avaliação de argumentos e o loop
Roda quando a FUNÇÃO retorna, em LIFO; argumentos avaliados na hora do `defer`. Loop: os defers acumulam até a função acabar — abrir N arquivos com `defer Close()` no loop esgota FDs. Extraia o corpo numa função.
- Difícil
Interfaces implícitas e o `nil` interface trap
Satisfação por método, sem `implements` (interface definida por quem consome). Interface = (tipo, valor); só é nil se os dois são nil. Retornar um `*T` nil como `error` faz `err != nil` dar true.