Go语言的 path
模块提供了处理斜杠分隔路径的通用方法,适用于跨平台路径操作(如 URL 路径或 Unix 风格路径)。以下是 path
模块的核心方法及示例说明:
1. path.Base
返回路径的最后一个元素(类似 Unix 的 basename
命令)。
示例:
package mainimport ("fmt""path"
)func main() {fmt.Println(path.Base("/a/b/c.txt")) // 输出: c.txtfmt.Println(path.Base("/a/b/")) // 输出: bfmt.Println(path.Base("")) // 输出: .
}
2. path.Dir
返回路径的目录部分(去掉最后一个元素)。
示例:
fmt.Println(path.Dir("/a/b/c.txt")) // 输出: /a/b
fmt.Println(path.Dir("a/b/c")) // 输出: a/b
fmt.Println(path.Dir("")) // 输出: .
3. path.Ext
返回文件扩展名(最后一个点 .
之后的部分)。
示例:
fmt.Println(path.Ext("/a/b/c.txt")) // 输出: .txt
fmt.Println(path.Ext("file.tar.gz")) // 输出: .gz
fmt.Println(path.Ext("no_extension")) // 输出: ""
4. path.IsAbs
检查路径是否为绝对路径(以斜杠 /
开头)。
示例:
fmt.Println(path.IsAbs("/a/b")) // 输出: true
fmt.Println(path.IsAbs("a/b")) // 输出: false
fmt.Println(path.IsAbs("")) // 输出: false
5. path.Join
将多个路径元素拼接为单一路径,自动处理斜杠。
示例:
fmt.Println(path.Join("a", "b", "c")) // 输出: a/b/c
fmt.Println(path.Join("/a", "b/", "//c")) // 输出: /a/b/c
fmt.Println(path.Join("", "a")) // 输出: a
6. path.Clean
清理路径中的冗余字符(如 .
、..
、多余斜杠)。
示例:
fmt.Println(path.Clean("/a/../b")) // 输出: /b
fmt.Println(path.Clean("a//b/c/..")) // 输出: a/b
fmt.Println(path.Clean("./a/b/")) // 输出: a/b
7. path.Split
将路径分割为目录和文件名两部分。
示例:
dir, file := path.Split("/a/b/c.txt")
fmt.Println("目录:", dir) // 输出: 目录: /a/b/
fmt.Println("文件名:", file) // 输出: 文件名: c.txtdir, file = path.Split("file.txt")
fmt.Println("目录:", dir) // 输出: 目录:
fmt.Println("文件名:", file) // 输出: 文件名: file.txt
8. path.Match
检查路径是否匹配通配符模式(支持 *
、?
、[abc]
等)。
示例:
matched, err := path.Match("a/*/c.txt", "a/b/c.txt")
fmt.Println(matched, err) // 输出: true <nil>matched, err = path.Match("a/*/c.txt", "a/b/d/c.txt")
fmt.Println(matched, err) // 输出: false <nil>
9. path.SplitList
分割由系统路径分隔符(如 :
或 ;
)分隔的路径列表(常用于解析环境变量如 PATH
)。
示例:
paths := "dir1:/dir2:/dir3"
list := path.SplitList(paths)
fmt.Println(list) // 输出: [dir1 /dir2 /dir3]
总结
- 核心方法:
- 路径操作:
Join
,Split
,Clean
,Base
,Dir
,Ext
- 检查与匹配:
IsAbs
,Match
- 路径列表处理:
SplitList
- 路径操作:
- 适用场景:
- 处理 URL 路径或 Unix 风格路径。
- 跨平台路径拼接和清理(不依赖操作系统)。
- 注意事项:
path
模块仅处理/
分隔符,不适用于 Windows 文件路径(需用path/filepath
)。Match
的通配符规则与文件系统无关,仅基于路径字符串匹配。