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

在 Go 中获取文件信息,主要靠 os.Stat 和 os.Lstat 两个函数。它们都返回 os.FileInfo 接口,但行为关键不同:一个“穿透”符号链接,一个“停在”符号链接本身。
os.Stat 会自动解析路径中的符号链接,最终返回链接指向的**实际文件或目录**的信息。这是最常用的方式,适合绝大多数场景——比如判断某路径是否为普通文件、获取大小、修改时间等。
error(如 os.ErrNotExist)os.Stat("/usr/bin/python") 在大多数 Linux 系统上会返回 /usr/bin/python3 或真实二进制文件的信息,而非软链接本身的属性os.Lstat 不解析符号链接,直接读取该路径**作为链接项**的元数据。只有当你需要检查链接是否存在、谁创建了它、它的原始大小(通常是路径字符串长度)或是否真的是个链接时,才用它。
fi.Mode()&os.ModeSymlink != 0)os.Lstat("/usr/bin/python") 可能返回一个 ModeSymlink 类型的 FileInfo,且 Size() 返回的是链接目标路径字符串的字节数(如 "../bin/python3" 的长度)这两个函数都可能失败,不能忽略返回的 error。常见做法是先调用,再用类型断言或错误比较做分支处理。
立即学习“go语言免费学习笔记(深入)”;
errors.Is(err, os.ErrNotExist) 判断路径不存在(推荐,兼容不同系统)os.IsPermission(err) 判断权限拒绝if err != nil 就 panic,尤其在服务端或 CLI 工具中应友好提示Lstat 判断类型,再按需 Stat
无论 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中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号