Buffered vs unbuffered channels

Buffered channels store values in memory to prevent blocking, while unbuffered channels require immediate synchronization between sender and receiver.

Buffered channels hold a fixed number of values in memory, while unbuffered channels block the sender until a receiver is ready. Use buffered channels to decouple producers from consumers, but use unbuffered channels for strict synchronization or to prevent signal loss in signal.Notify.

// Unbuffered: Sender blocks until receiver reads
ch := make(chan int)

// Buffered: Sender proceeds until buffer (capacity 1) is full
ch := make(chan int, 1)