Go — Channels e select
TL;DR
Galho 8 da trilha Go — o mecanismo que dá nome ao lema “não comunique compartilhando memória; compartilhe memória comunicando”. 8 notas em 3 fases: o channel como tubo entre goroutines e buffered vs unbuffered (Iniciado); fechamento com
range, direções de channel eselect(Adepto); padrões de composição (fan-in/fan-out/pipeline), worker pools e as armadilhas clássicas — deadlock, leak, panic de close duplo (Magus). Ao fim, você orquestra goroutines com channels em vez de mutexes.
Depois de dominar goroutines no galho anterior, este galho entra no meio de comunicação idiomático do Go: o channel. É a estrutura que sincroniza, transporta dados e sinaliza término entre goroutines concorrentes, e o select é o multiplexador que espera em vários channels ao mesmo tempo. Ver roadmap pro estado das notas.
Notas por fase
Iniciado — o tubo e suas variantes
- 01 - Channels — o tubo entre goroutines — criação, envio, recebimento, bloqueio e o modelo mental de tubo
- 02 - Buffered vs unbuffered — capacidade, rendezvous síncrono vs desacoplamento assíncrono
Adepto — controlando o fluxo
- 03 - Fechando channels e o range —
close, o segundo valor de recebimento, iterar comrange - 04 - Direções de channel —
chan<-,<-chan, contratos de API mais seguros em assinaturas de função - 05 - select — multiplexar channels,
default, timeout comtime.After,selectvazio
Magus — composição e armadilhas
- 06 - Padrões — fan-in, fan-out, pipeline — distribuir trabalho, consolidar resultados, encadear estágios
- 07 - Worker pools — pool de goroutines consumindo de um channel compartilhado, controle de concorrência
- 08 - Armadilhas de channels — deadlock, goroutine leak, close de channel já fechado, send em channel fechado
Veja também
- Trilha Go — índice geral (21 galhos + capstone)
- Galho anterior: Goroutines e o scheduler
- Próximo galho: Sincronização e context (galho 9) — onde
syncecontextcobrem os casos que channels sozinhos não resolvem bem