filepath

path/filepath 包是用于处理 ​​文件路径​​ 的核心工具,尤其擅长解决跨平台(Windows、Unix 等)的路径兼容性问题。

filepath 包使用正斜杠或反斜杠,具体取决于作系统。要处理始终使用正斜杠的 URL 等路径,而不考虑作系统,请参阅 path 包。

  • 路径拼接与分割​​:自动处理不同操作系统的路径分隔符(/\)。

  • ​路径规范化​​:消除冗余(如 ...),生成简洁的绝对或相对路径。

  • ​通配符匹配​​:支持 *? 等模式匹配文件路径。

  • ​跨平台兼容​​:透明适配不同操作系统的路径规则。

​特性​

path

filepath

​适用场景​

通用斜杠路径(如 URL)

文件系统路径(处理 OS 差异)

​分隔符处理​

固定使用 /

自动适配当前系统的分隔符

​跨平台支持​

1 路径拼接 Join(elem ...string) string

// 自动处理分隔符和冗余路径
path := filepath.Join("dir", "sub", "../file.txt") 
// Unix → "dir/file.txt", Windows → "dir\file.txt"​

2 路径分割:Split(path string) (dir, file string)

dir, file := filepath.Split("/home/user/docs/file.txt")
// dir = "/home/user/docs/", file = "file.txt"

3 获取绝对路径:Abs(path string) (string, error)

4 获取相对路径:Rel(basepath, targpath string) (string, error)

5 路径规范化:Clean(path string) string

6 通配符匹配:Match(pattern, name string) (bool, error)

7 文件搜索:Glob(pattern string) ([]string, error)

8 目录遍历:Walk(root string, walkFn WalkFunc) error

9 常量

​常量​

说明

示例值(Windows/Unix)

Separator

路径分隔符(如 \/

'\\''/'

ListSeparator

环境变量分隔符(如 ;:

';'':'

分类
函数名
主要作用说明
使用示例 (输入 → 输出)
注意事项

​路径构建与清理​

Join(elem ...string) string

​安全地连接​​多个路径片段,自动处理分隔符。是拼接路径的​​首选方法​​。

filepath.Join("a", "b", "c")a/b/c(Unix) 或 a\b\c(Windows)

比手动字符串拼接更安全可靠,会自动清理多余的分隔符 。

Clean(path string) string

​清理和简化​​路径,去除多余的...和重复的分隔符,返回最简形式。

filepath.Clean("a/../b/./c")b/c

仅通过字符串处理,不会在文件系统中检查路径是否存在 。

​路径分解​

Split(path string) (dir, file string)

​分割路径​​为目录部分(dir)和文件名部分(file)。

filepath.Split("/home/user/file.txt")("/home/user/", "file.txt")

如果路径中无分隔符,dir为空字符串,file为整个路径 。

Dir(path string) string

获取路径中​​最后一个分隔符之前​​的部分(目录路径)。

filepath.Dir("/home/user/file.txt")/home/user

返回的路径通常不以分隔符结尾,除非是根目录 。

Base(path string) string

获取路径中​​最后一个分隔符之后​​的部分(文件或目录名)。

filepath.Base("/home/user/file.txt")file.txt

如果路径为空,返回 ".";如果路径全为分隔符,返回单个分隔符 。

Ext(path string) string

获取文件的​​扩展名​​(包括点号,如.txt)。

filepath.Ext("archive.tar.gz").gz

返回最后一个点开始的后缀。如果没有点,则返回空字符串 。

​路径检查与转换​

IsAbs(path string) bool

判断路径是否为​​绝对路径​​。

filepath.IsAbs("/home/user")true(Unix) filepath.IsAbs("C:\Users")true(Windows)

结果依赖于操作系统。

Abs(path string) (string, error)

返回路径的​​绝对路径​​表示。如果路径不是绝对路径,会将其与当前工作目录连接。

filepath.Abs("file.txt")("/current/working/dir/file.txt", nil)

如果路径无法转换为绝对路径(如无效字符),会返回错误。

Rel(basepath, targpath string) (string, error)

计算从 basepathtargpath的​​相对路径​​。

filepath.Rel("/a/b", "/a/b/c/d")c/d

basepathtargpath必须都是相对路径或都是绝对路径,否则会报错 。

ToSlash(path string) string

将路径分隔符统一转换为​​斜杠(/)​​,常用于格式化输出。

filepath.ToSlash("C:\a\b")C:/a/b

主要用于标准化路径表示,不用于实际文件操作。

FromSlash(path string) string

将路径中的斜杠(/)转换为​​当前系统的路径分隔符​​。

filepath.FromSlash("a/b/c")a\b\c(Windows)

VolumeName(path string) string

(主要在Windows下)返回路径的​​卷名​​(如 C:)。

filepath.VolumeName("C:\\foo\\bar")C:

在类Unix系统上,通常返回空字符串。

​路径匹配与遍历​

Match(pattern, name string) (bool, error)

检查文件名是否与​​Shell风格的通配符模式​​(如*.go, test?.*)匹配。

filepath.Match("*.go", "hello.go")true, nil

模式要求匹配整个文件名,而非一部分。*不匹配路径分隔符 。

Glob(pattern string) (matches []string, error)

​查找所有匹配模式​​的文件路径。

filepath.Glob("*.go")["hello.go", "main.go"], nil

适用于简单的模式匹配。对于复杂遍历,Walk更强大 。

Walk(root string, walkFn WalkFunc) error

​递归遍历​​指定目录及其所有子目录,对每个文件/目录执行自定义操作。

详见下方示例代码。

对于大型目录树,性能开销可能较大。Go 1.16 引入了更高效的 WalkDir函数,建议在新代码中使用 。

WalkDir(root string, fn fs.WalkDirFunc) error<br>

递归遍历目录树的强大函数。文件按字典顺序遍历,这使得输出具有确定性,但要求 WalkDir 在继续遍历该目录之前将整个目录读入内存。WalkDir 不会跟踪符号链接。

详见下方示例代码。

性能更优​​。回调函数参数为 fs.DirEntry,无需额外系统调用即可判断文件类型。

最后更新于