Go’s io.Reader and io.Writer

Miriah Peterson
3 min readMay 13, 2024

While preparing for my Go for Webservices live course, I learned something interesting about how Go handles bits of data. Every byte that gets moved into and out of a program’s memory seems to utilize an implementation of the io.Reader or io.Writer interface. HTTP calls, file rights, db reads, and even writes to the terminal are all implementations of Readers and Writers. Understanding and harnessing the power of Readers and Writers are essential for building modern Webservices. Now we can dive into the standard library to understand how these interfaces allow for seamless communication between the application’s internal memory and the external world.

What is I/O

I/O operations( or Input/Output operations) are a basic computer science principle. Essentially, it involves communication from within the application’s memory to external systems. Every system has some kind of I/O operation, but once it is abstracted away by the code, it is hard to see how they are all related. It is wild that Go’s two interfaces can be so foundational to all of these different kinds of operations, but I guess that is why somebody else writes them and I just use them.

The io.Reader interface, characterized by its Read(p []byte) (n int, err error) method, represents the read end of a data stream. It is responsible for ingesting data from the external system and bringing it inside our system’s memory. On the other hand, the io.Writer interface, defined by the Write(p []byte) (n int, err error) method, serves as the counterpart…

--

--

Miriah Peterson

Data Reliability Engineer, Golang Instructor, Twitch streamer, Community organizer