Erro como valor de retorno em Go
Pergunta
Por que Go trata erro como um valor de retorno (`if err != nil`) em vez de exceções, e quais as críticas e defesas desse modelo?
Resposta esperada
Em Go, funções retornam `(resultado, error)` e quem chama decide na hora o que fazer. Defesa do modelo: o caminho de erro fica explícito e local — você vê no código onde cada falha é tratada, não há fluxo invisível pulando stack frames, e fica difícil ignorar um erro sem que isso apareça. Críticas: verbosidade (`if err != nil` repetido), fácil esquecer de checar (o compilador não força, embora linters ajudem), e perda de contexto se você só propaga o erro sem embrulhar (`fmt.Errorf("...: %w", err)` resolve, mantendo a cadeia). `panic`/`recover` existem, mas são pra falhas realmente irrecuperáveis, não pra controle de fluxo.
Por que perguntam isso
Pergunta pleno de Go. Sinal de experiência: mencionar `%w`/wrapping pra não perder contexto, e que `panic` não é controle de fluxo.