Go1.24 - 按行读取文件

建议点击 查看原文 查看最新内容。

原文链接: https://typonotes.com/posts/2025/05/16/read-file-line-by-line-go124/

在 go 1.24 中新增加了两个标准方法 - strings.Lines()bytes.Lines()

  1. 都使用 分隔符 \n 拆分对象。
  2. 都返回一个 Seq 的迭代对象。

Seq 迭代对象

Seq 迭代对象可以接受一个 回调函数使用 for 循环 进行遍历。

使用 回调函数 时, 可以通过 return false 提前终止遍历。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// ... omit
// 读取文件内容
seq := bytes.Lines(b)

func callback(line []byte) bool {
    if bytes.HasPrefix(line, []byte("//")) {
        // 提前结束
        return false
    }


    println(string(line))
    return true
}

seq(callback)

使用 for 循环 遍历需要注意是

  1. 只有一个迭代变量。
  2. 迭代变量是 value 而非 slice index 或 map key。 类似 for _, line := range slice/map
1
2
3
4
5
6
for line := range seq {
    if bytes.HasPrefix(line, []byte("//")) {
        continue
    }
    println(string(line))
}