os.Stat 是获取文件大小的首选方式,返回 os.FileInfo 的 Size() 方法,不打开文件、仅读元数据;注意目录返回自身 inode 大小而非子项总和,符号链接默认解析目标,需权限与存在性检查。
用 os.Stat 获取文件大小最常用
绝大多数场景下,os.Stat 是获取文件大小的首选方式。它返回一个 os.FileInfo 接口,其中 Size() 方法直接给出字节数。
注意:该方法不打开文件,只读取元数据,速度快、开销小。
常见错误是传入目录路径却期望得到“总大小”——os.Stat 对目录返回的是其自身 inode 占用(通常 4KB 左右),不是子项合计。
- 确保路径存在且有读权限,否则会返回
*os.PathError - 若路径是符号链接,默认解析目标;如需获取链接文件本身大小,用
os.Lstat - 示例:
info, err := os.Stat("config.json") if err != nil { log.Fatal(err) } size := info.Size() // int64 类型
用 os.Open + Stat() 适合已打开文件
当你已经通过 os.Open 打开了一个 *os.File,可以直接调用它的 Stat() 方法——这比再用 os.Stat 多一次系统调用更高效。
典型场景:读取配置、处理上传临时文件、流式解析前预判体积。