How the io Package Works in Go

Reader, Writer, and Closer

The io package defines Reader, Writer, and Closer interfaces to standardize data streaming and resource management in Go.

The io package defines three core interfacesβ€”Reader, Writer, and Closerβ€”that standardize how Go programs handle data streams and resource cleanup. Reader provides the Read method to pull bytes, Writer provides Write to push bytes, and Closer provides Close to release underlying resources like files or network connections.

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	// Open a file (implements Reader, Writer, Closer)
	f, err := os.Create("example.txt")
	if err != nil {
		panic(err)
	}
	defer f.Close() // Ensures Close() is called when main exits

	// Write data using the Writer interface
	_, err = io.WriteString(f, "Hello, Go!")
	if err != nil {
		panic(err)
	}

	// Read data using the Reader interface
	buf := make([]byte, 10)
	_, err = f.Read(buf)
	if err != nil && err != io.EOF {
		panic(err)
	}
	fmt.Printf("Read: %s\n", buf)
}