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 |