Interfaces are crucial for decomposing and combining functionality in Go programs. Among the interfaces in the standard library two are a bit more prominent, as they provide simple, yet powerful facilities to work with data streams: io.Reader and io.Writer. Data streams are pervasive. They are also an important part to the UNIX philosophy, which encourages programs to work with (text) streams, because that is a universal interface. In this workshop, we will explore the io.Reader and io.Writer interfaces with the help of lots of example, taken from the Go standard library, open source projects and custom examples, which will demonstrate their versatility.