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)
}