0Pricing
Go Academy · 课时

使用 os 与 bufio 读取文件

安全地打开文件、读取行并关闭文件

使用 os 与 bufio 读取文件 是 CoddyKit 上的免费 Go Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Go Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Go Academy 课程共包含 4 节课。

os.ReadFile

os.ReadFile(Go 1.16+)会在一次调用中将整个文件读取到字节切片中。对于小型文件,这种方式简单且符合惯用写法。

data, err := os.ReadFile("config.json")
if err != nil { log.Fatal(err) }
fmt.Println(string(data))

os.Open 与手动关闭

如果需要更多控制,请使用 os.Open(只读)打开文件,并使用 defer 关闭它:

f, err := os.Open("data.txt")
if err != nil { return err }
defer f.Close()

读取到缓冲区

使用 f.Read(buf) 读取一块字节。它会返回读取的字节数,并在文件结束时返回 io.EOF。

buf := make([]byte, 1024)
n, err := f.Read(buf)
if err != nil && err != io.EOF { return err }
fmt.Println(string(buf[:n]))

bufio.NewReader

使用 bufio.Reader 包装文件以缓冲读取,从而减少系统调用。其方法包括 ReadString、ReadLine 和 ReadByte。

reader := bufio.NewReader(f)
line, err := reader.ReadString('\n')

使用 bufio.Scanner 逐行读取

bufio.NewScanner 是逐行读取文本文件的惯用方式。默认的分割函数是 ScanLines。

scanner := bufio.NewScanner(f)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}
if err := scanner.Err(); err != nil { return err }

自定义扫描器缓冲区

扫描器的默认缓冲区为 64 KiB。对于包含超长行的文件,请使用 scanner.Buffer 增大缓冲区。

buf := make([]byte, 1024*1024)
scanner.Buffer(buf, len(buf))

io.ReadAll

io.ReadAll 会从任意 io.Reader 读取数据,直到 EOF,并返回字节。它适用于从网络连接、响应正文或由读取器包装的文件中读取数据。

data, err := io.ReadAll(f)

扫描单词和字节

替换扫描器的分割函数,即可扫描单词(bufio.ScanWords)或单个字节(bufio.ScanBytes)。

scanner.Split(bufio.ScanWords)
for scanner.Scan() {
    fmt.Println(scanner.Text())
}

读取结构化文本

读取行后,使用 strings.Fields 或 strings.Split 解析列:

for scanner.Scan() {
    fields := strings.Fields(scanner.Text())
    // fields[0], fields[1], ...
}

文件读取错误

扫描循环结束后始终检查扫描器的 Err()——它会返回第一个非 EOF 错误。即使循环正常结束且没有扫描到任何行,也可能已经遇到错误。

读取指定的标准输入

在任何接受 io.Reader 的位置都可以使用 os.Stdin。这样,CLI 工具就能同时处理文件参数和管道输入。

scanner := bufio.NewScanner(os.Stdin)

快速检查

在 Go 中,哪种 bufio 类型是逐行读取文本文件的惯用方式?

回顾:读取文件

关键要点:

  • os.ReadFile:一次调用读取整个小型文件
  • bufio.Scanner:逐行读取;循环结束后检查 Err()
  • bufio.Reader:缓冲读取,减少系统调用
  • io.ReadAll:完整读取任意 io.Reader

常见问题解答

「使用 os 与 bufio 读取文件」课时是免费的吗?

是的 — 「使用 os 与 bufio 读取文件」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Go Academy 课程的其余内容,请升级到 CoddyKit PRO。 Go Academy 课程共包含 4 节课。

「使用 os 与 bufio 读取文件」这节课中我会学到什么?

安全地打开文件、读取行并关闭文件 你通过在浏览器中直接运行的动手代码来练习 Go Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Go Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Go Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「使用 os 与 bufio 读取文件」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Go Academy 课中编写并运行代码吗?

能。每节 Go Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用 os 与 bufio 读取文件
  2. 写入文件与临时文件
  3. JSON 编码与解码
  4. 流式处理 JSON 与 CSV
← 返回 Go Academy