Z
ZHANK
进阶技巧

文件与 IO

os.ReadFile/WriteFile、bufio 缓冲读写、io.Copy、defer 关闭

文件与 IO

Go 的 os + io 包提供了简洁高效的文件操作。defer f.Close() 是标配,bufio 处理大文件。

学完本章你将: 掌握 os.ReadFile/WriteFile、bufio、io.Copy、defer 关闭。


基础读写

go
package main

import (
    "fmt"
    "os"
)

func main() {
    // 一次性全读
    data, err := os.ReadFile("input.txt")
    if err != nil {
        fmt.Println("读取出错:", err)
        return
    }
    fmt.Println(string(data))

    // 一次性全写
    content := []byte("Hello, Go!")
    os.WriteFile("output.txt", content, 0644)
}

逐行读写(大文件)

go
import (
    "bufio"
    "os"
)

// 逐行读
f, _ := os.Open("large.txt")
defer f.Close()

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

// 缓冲写
writer := bufio.NewWriter(f)
writer.WriteString("Hello\n")
writer.Flush()  // 确保写入磁盘

io.Copy —— 万能复制

go
// 文件复制(高效)
src, _ := os.Open("source.txt")
defer src.Close()
dst, _ := os.Create("dest.txt")
defer dst.Close()

io.Copy(dst, src)  // 一行搞定

文件信息与目录

go
info, _ := os.Stat("file.txt")
info.Name()     // 文件名
info.Size()     // 大小
info.IsDir()    // 是否目录

os.Mkdir("newdir", 0755)
os.MkdirAll("a/b/c", 0755)  // 递归创建
os.Remove("file.txt")
os.RemoveAll("dir")          // 递归删除