I/O and Streaming

Overview

Go’s io package defines fundamental interfaces for streaming data.

Core Interfaces

type Reader interface {
    Read(p []byte) (n int, err error)
}

type Writer interface {
    Write(p []byte) (n int, err error)
}

type Closer interface {
    Close() error
}

Reading

// Read from file
f, _ := os.Open("file.txt")
defer f.Close()

buf := make([]byte, 1024)
n, err := f.Read(buf)

// Read all
data, err := io.ReadAll(f)

Writing

f, _ := os.Create("output.txt")
defer f.Close()

f.Write([]byte("Hello"))
f.WriteString("World")

Copying

// Copy all data
io.Copy(dst, src)

// Copy with limit
io.CopyN(dst, src, 1024)

Bufio

import "bufio"

// Buffered reading
reader := bufio.NewReader(f)
line, _ := reader.ReadString('\n')

// Buffered writing
writer := bufio.NewWriter(f)
writer.WriteString("data")
writer.Flush()

// Scanner (line by line)
scanner := bufio.NewScanner(f)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

Bytes Buffer

var buf bytes.Buffer
buf.WriteString("Hello")
buf.Write([]byte(" World"))
content := buf.String()

Pipe

pr, pw := io.Pipe()

go func() {
    pw.Write([]byte("data"))
    pw.Close()
}()

data, _ := io.ReadAll(pr)

Summary

Interface Method
Reader Read([]byte) (int, error)
Writer Write([]byte) (int, error)
Closer Close() error
ReadWriter Both Read and Write