在Go中高效遍历大文件的方法通常有两种:逐行读取和缓存读取。
- 逐行读取:使用bufio.Scanner包来逐行读取大文件。这种方法比较简单,适用于文本文件的遍历。
file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { line := scanner.Text() // 处理每一行内容 } if err := scanner.Err(); err != nil { log.Fatal(err) }
- 缓存读取:使用bufio.Reader包来缓存读取大文件。这种方法可以一次性读取大块数据,提高读取效率。
file, err := os.Open("example.txt") if err != nil { log.Fatal(err) } defer file.Close() reader := bufio.NewReader(file) buffer := make([]byte, 1024) for { n, err := reader.Read(buffer) if err != nil && err != io.EOF { log.Fatal(err) } if n == 0 { break } // 处理读取的数据 }
无论使用哪种方法,都需要注意在遍历大文件时及时关闭文件资源,以避免内存泄漏。同时,根据实际情况调整缓冲区大小,以提高读取效率。