文件与 IO 操作

概述

文件操作和数据处理是应用程序的常见需求。Go 语言提供了丰富的标准库来处理文件读写、JSON、XML 等数据格式。本部分将详细讲解这些内容。

章节内容

33. 文件操作

文件操作是应用程序的基本功能。本章讲解:

  • 文件读写基础
  • os 包使用
  • 文件信息获取
  • 目录操作
  • 文件权限

34. IO 操作

IO 操作是数据处理的核心。本章涵盖:

  • io 包接口
  • Reader 和 Writer
  • 缓冲 IO
  • io.Copy 使用
  • 自定义 Reader/Writer

35. JSON 与 XML 处理

JSON 和 XML 是常用的数据交换格式。本章介绍:

  • JSON 编码解码
  • 结构体标签
  • XML 编码解码
  • 自定义序列化
  • 处理未知结构

学习要点

文件读写

// 读取文件
data, err := os.ReadFile("file.txt")

// 写入文件
err := os.WriteFile("file.txt", data, 0644)

// 打开文件
file, err := os.Open("file.txt")
defer file.Close()

// 创建文件
file, err := os.Create("newfile.txt")
defer file.Close()

IO 操作

// 使用 Reader 和 Writer
reader := strings.NewReader("Hello")
writer := &bytes.Buffer{}

// 复制数据
io.Copy(writer, reader)

// 缓冲读写
bufReader := bufio.NewReader(file)
bufWriter := bufio.NewWriter(file)

JSON 处理

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

// 编码
data, _ := json.Marshal(user)
data, _ := json.MarshalIndent(user, "", "  ")

// 解码
var user User
json.Unmarshal(data, &user)

// 流式处理
encoder := json.NewEncoder(file)
decoder := json.NewDecoder(file)

XML 处理

type Person struct {
    XMLName xml.Name `xml:"person"`
    Name    string   `xml:"name"`
    Age     int      `xml:"age"`
}

// 编码
data, _ := xml.Marshal(person)

// 解码
var person Person
xml.Unmarshal(data, &person)

学习建议

  1. 使用 defer:打开文件后立即 defer Close()
  2. 处理错误:不要忽略 IO 操作的错误
  3. 选择合适方法:小文件用 ReadFile,大文件用流式处理
  4. 注意编码:处理文本文件时注意字符编码
  5. 资源管理:及时关闭文件句柄