Channels ou mutex: qual usar
Pergunta
Em Go, quando você usa channels para coordenar goroutines e quando um `sync.Mutex` é a escolha certa?
Resposta esperada
O lema é 'não comunique compartilhando memória; compartilhe memória comunicando' — channels são a ferramenta padrão pra passar propriedade de um dado entre goroutines, distribuir trabalho (worker pool), sinalizar conclusão ou cancelamento (junto com `context`). Mutex é melhor quando o problema é proteger o acesso concorrente a um estado que fica no lugar — um contador, um cache, um mapa compartilhado — onde enfileirar tudo num channel seria mais lento e mais complicado. Regra prática: se você está transferindo um valor, channel; se está protegendo uma seção crítica curta sobre estado compartilhado, mutex. Usar channel pra tudo leva a designs tortos; usar mutex pra orquestração leva a deadlock.
Por que perguntam isso
Pergunta pleno/sênior. O anti-padrão a ouvir: 'sempre channel' ou 'sempre mutex'. Resposta forte dá o critério (transferir vs proteger).