Golang秒读32GB大文件,如何读取?
在Go中,处理大文件时,一般采用分块读取的方式,以避免一次性加载整个文件到内存中。以下是读取大文件的简洁步骤:
1 打开文件: 使用os.Open
打开文件。
file, err := os.Open("largefile.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
2 获取文件信息: 使用file.Stat
获取文件的基本信息,包括文件大小。
fileInfo, err := file.Stat()
if err != nil {
log.Fatal(err)
}
fileSize := fileInfo.Size()
3 设置缓冲区大小: 为了提高读取效率,使用合适大小的缓冲区。
bufferSize := 8192 // 8KB 缓冲区大小
buffer := make([]byte, bufferSize)
4 循环读取文件内容: 使用file.Read
循环读取文件内容。
for {
bytesRead, err := file.Read(buffer)
if err == io.EOF {
// 文件读取完毕
break
}
if err != nil {
log.Fatal(err)
}
// 处理读取的数据,例如输出到控制台
fmt.Print(string(buffer[:bytesRead]))
}
5 关闭文件: 读取完成后关闭文件。
file.Close()
下面是一个完整的读取大文件的示例代码:
package main
import (
"bufio"
"log"
"os"
)
func main() {
file, err := os.Open("large_file.txt")
if err != nil {
log.Fatal(err)
}
defer file.Close()
const maxScanTokenSize = 64 * 1024 * 1024 // 64MB
buf := make([]byte, maxScanTokenSize)
scanner := bufio.NewScanner(file)
scanner.Buffer(buf, maxScanTokenSize)
for scanner.Scan() {
line := scanner.Text()
// 处理每一行的逻辑
}
if err := scanner.Err(); err != nil {
log.Fatal(err)
}
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
2021-12-28 go从接口等于指针转换成string,(重要)
2021-12-28 linux corosync+pacemaker+drbd+mysql配置安装详解
2021-12-28 DRBD原理及特性概述
2021-12-28 drbd脑裂问题的解决
2021-12-28 ceph rbd+corosync+pacemaker HA-NFS文件共享
2021-12-28 go 值为 nil 能调用函数吗?
2021-12-28 指针逃逸跟值类型的区别