Golang os.Stat与Lstat使用方法解析
os.Stat获取符号链接指向的目标文件信息,os.Lstat获取符号链接自身元数据;二者均返回os.FileInfo接口,需检查错误并用其方法提取Name、Size、Mode、ModTime等信息。
os.Stat获取符号链接指向的目标文件信息,os.Lstat获取符号链接自身元数据;二者均返回os.FileInfo接口,需检查错误并用其方法提取Name、Size、Mode、ModTime等信息。

在 Go 中获取文件信息,主要靠 os.Stat 和 os.Lstat 两个函数。它们都返回 os.FileInfo 接口,但行为关键不同:一个“穿透”符号链接,一个“停在”符号链接本身。
os.Stat:获取目标文件的真实信息
os.Stat 会自动解析路径中的符号链接,最终返回链接指向的**实际文件或目录**的信息。这是最常用的方式,适合绝大多数场景——比如判断某路径是否为普通文件、获取大小、修改时间等。
- 如果路径不存在或权限不足,返回
error(如os.ErrNotExist) - 如果路径是符号链接,它不返回链接自身的元数据,而是返回链接所指对象的元数据
- 示例:
os.Stat("/usr/bin/python")在大多数 Linux 系统上会返回/usr/bin/python3或真实二进制文件的信息,而非软链接本身的属性
os.Lstat:获取符号链接自身的信息
os.Lstat 不解析符号链接,直接读取该路径**作为链接项**的元数据。只有当你需要检查链接是否存在、谁创建了它、它的原始大小(通常是路径字符串长度)或是否真的是个链接时,才用它。
- 能准确识别出一个路径是不是符号链接(
fi.Mode()&os.ModeSymlink != 0) - 对不存在的路径同样返回错误;但对损坏的悬空链接(dangling symlink),它仍可成功返回链接自身的 info
- 示例:
os.Lstat("/usr/bin/python")可能返回一个ModeSymlink类型的FileInfo,且Size()返回的是链接目标路径字符串的字节数(如"../bin/python3"的长度)
如何安全使用 Stat/Lstat:记得检查错误
这两个函数都可能失败,不能忽略返回的 error。常见做法是先调用,再用类型断言或错误比较做分支处理。
- 用
errors.Is(err, os.ErrNotExist)判断路径不存在(推荐,兼容不同系统) - 用
os.IsPermission(err)判断权限拒绝 - 不要直接写
if err != nil就 panic,尤其在服务端或 CLI 工具中应友好提示 - 若需同时知道是否为链接又想获取真实信息,可先
Lstat判断类型,再按需Stat
FileInfo 能拿到哪些关键信息?
无论 Stat 还是 Lstat,返回的 os.FileInfo 都提供统一接口:
Name():不含路径的文件名(注意不是完整路径)Size():普通文件字节数;目录在不同系统表现不一;符号链接返回目标路径长度Mode():包含类型(文件/目录/链接/设备等)和权限位,可用Mode().IsDir()、Mode().IsRegular()、Mode()&os.ModeSymlink != 0判断ModTime():最后修改时间(time.Time)IsDir()等是便捷方法,内部就是对Mode()的封装
基本上就这些。记住核心区别:Stat 看“背后的东西”,Lstat 看“表面的样子”。用对函数,再结合 FileInfo 方法,就能稳稳拿到你需要的文件信息。
Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













