最直接方式是调用os.Stat获取os.FileInfo接口并调用Size()方法得到int64字节数;需检查err、不需打开文件、支持大文件;可转KB/MB/GB(1024进制),批量统计需配合filepath.Walk或os.ReadDir。
用 Go 语言获取单个文件大小最直接的方式是调用 os.Stat,它返回一个 os.FileInfo 接口,其中 Size() 方法就能拿到字节数。
只需传入文件路径,调用 os.Stat,检查错误,然后读取 Size():
int64,单位为字节,适合大文件err != nil,比如路径不存在、无权限时会报错Stat 是轻量级系统调用示例代码:
```go直接输出字节不友好,可按 1024 进制转成 KB/MB/GB:
fmt.Sprintf("%.1f KB", float64(size)/1024)
os.Stat 只适用于已知路径的单个文件;若要算整个目录,需配合 filepath.Walk 或 os.ReadDir 遍历:
DirEntry 调用 entry.Info() 获取 FileInfo
Size()
filepath.WalkDir 的回调控制是否继续小技巧:用 atomic.Int64 并发安全地累加,配合 sync.WaitGroup 提升大目录遍历效率(非必须,但适合多核场景)。
几个容易忽略但关键的细节:
os.Stat 对符号链接返回的是目标文件信息,如需链接本身大小,改用 os.Lstat
IsRegular() 判断Size() 返回逻辑大小,不是磁盘占用,如需实际占用请查 syscall.GetFileInformationByHandle(需额外处理)基本上就这些。不复杂但容易忽略权限和符号链接行为,日常统计够用又稳定。