Go语言逐行读取文件
使用Go语言逐行读取文件,最简单的方法是使用 bufio.Scanner。
常规做法
简单示例:
package main
import (
    "bufio"
    "fmt"
    "log"
    "os"
)
func main() {
    file, err := os.Open("/path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    // 注意,如果读取的行长度超过64k,则会报错
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}字符串长度超出64K
Scan在行超过 65536 个字符时出错。如果知道行长度大于 64K,可以使用 Buffer() 方法来增加Scan的容量。
添加Buffer的示例:
package main
import (
    "bufio"
    "fmt"
    "log"
    "os"
)
func main() {
    file, err := os.Open("/path/to/file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()
    scanner := bufio.NewScanner(file)
    const maxCapacity = longLineLen  // 需要的容量
    buf := make([]byte, maxCapacity)
    scanner.Buffer(buf, maxCapacity)
    for scanner.Scan() {
        fmt.Println(scanner.Text())
    }
    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}使用Buffer核心代码是:
buf := make([]byte, maxCapacity)
scanner.Buffer(buf, maxCapacity) 
             
             
             
             
            