Go Channels
External
Internal
TODO
Deplete Go_Channels into this.
Overview
The Go chan
s provide a composable, concurrent-safer way to communicate between concurrent processes.
Because channels are composable with other channels, this makes writing large systems simpler, because you can coordinate the input from multiple subsystems by easily composing the output together. You can combine input channels with timeouts, cancellations, or message to other subsystems.
The select
statement is the complement to Go's channels. It is what enables all the difficult parts of composing channels. select
statement allows you to wait for events, select a message from competing channels in a uniform random way, continue on if there are no messages waiting, and more.
Also see:
Channel Patterns
Pipelines
Transferring the Ownership of Data
If you have a bit of code that produces a result and wants to share that result with another bit of code, what you are really doing is transferring the ownership of that data. Data has an owner, and one way to make concurrent programs safe is to ensure only one concurrent context has ownership of data at a time. Channels are the recommended way to implement this pattern in Go, as they help us communicate this concept by encoding the intent into the channel's type. You can create buffered channels to implement a cheap in-memory queue and thus decouple the producer from consumer. This pattern also makes you code composable with other concurrent code.