Pipelines
Whenever you have several stages of operations performed on an input, you can construct a pipeline. Goroutines and channels can be used to construct high-throughput processing pipelines with different structures.
Simple pipeline without fan-out/fan-in
A simple pipeline can be constructed by connecting each stage running in its own goroutine using channels. The structure of the pipeline looks like Figure 10.1.
Figure 10.1: Simple asynchronous pipeline
How to do it...
This pipeline uses a separate error channel to report processing errors. We use a custom error type to capture diagnostic information:
type PipelineError struct {
// The stage in which error happened
Stage int
// The payload
Payload any
// The actual error
Err error
} Every stage...