Golang concurrency pattern thực dụng: goroutine, channel và context
Các pattern Go concurrency hay dùng nhất: worker pool, fan-out/fan-in, timeout với context và graceful shutdown.
GolangConcurrencyGoroutineChannelContext
Context là cơ chế cancel chuẩn
Mọi goroutine nên nhận `context.Context` làm tham số đầu tiên. Khi context bị cancel (timeout, signal, hoặc parent cancel), goroutine phải dừng sạch.
Dùng `context.WithTimeout` cho HTTP call và DB query để không để goroutine hang vô tận khi upstream chậm.
- context.WithTimeout cho I/O ngoài
- select với ctx.Done() trong vòng lặp
- WaitGroup để chờ goroutine xong trước shutdown
- Buffered channel để tránh goroutine leak
Bước tiếp theo
Nếu áp dụng vào dự án thật, hãy bắt đầu bằng phiên bản nhỏ nhất có thể đo được, ghi lại quyết định kỹ thuật, rồi cải tiến dựa trên log và phản hồi người dùng.