首页 > 后端开发 > Golang > 正文

如何使用Golang获取文件信息_Golang os Stat与Lstat使用技巧

P粉602998670
发布: 2025-12-21 16:33:35
原创
735人浏览过
os.Stat获取符号链接指向的目标文件信息,os.Lstat获取符号链接自身元数据;二者均返回os.FileInfo接口,需检查错误并用其方法提取Name、Size、Mode、ModTime等信息。

如何使用golang获取文件信息_golang os stat与lstat使用技巧

在 Go 中获取文件信息,主要靠 os.Statos.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。常见做法是先调用,再用类型断言或错误比较做分支处理。

Designify
Designify

拖入图片便可自动去除背景✨

Designify 90
查看详情 Designify

立即学习go语言免费学习笔记(深入)”;

  • 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 方法,就能稳稳拿到你需要的文件信息。

以上就是如何使用Golang获取文件信息_Golang os Stat与Lstat使用技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号