path/filepath 包涉及到路径操作时,路径分隔符使用 os.PathSeparator。不同系统,路径表示方式有所不同,比如 Unix 和 Windows 差别很大。本包能够处理所有的文件路径,不管是什么系统。
注意,路径操作函数并不会校验路径是否真实存在。
path实现了对斜杠分隔的路径的实用操作函数。
func IsAbs(path string) bool
返回路径是否是一个绝对路径。
func Abs(path string) (string, error)
Abs函数返回path代表的绝对路径
func Split(path string) (dir, file string)
Split函数将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。如果路径中没有斜杠,函数返回值dir会设为空字符串,file会设为path。两个返回值满足path == dir+file。
func Join(elem ...string) string
Join函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略。
func SplitList(path string) []string
有时,我们需要分割 PATH 或 GOPATH 之类的环境变量(这些路径被特定于 OS 的列表分隔符连接起来),filepath.SplitList 就是这个用途:
与 strings.Split 函数的不同之处是:对 ""
,SplitList 返回[]string{}
,而 strings.Split 返回 []string{""}
。SplitList 内部调用的是 strings.Split。
Dir() 和 Base() 函数将一个路径名字符串分解成目录和文件名两部分。
比如,给定路径名 /home/polaris/studygolang.go,Dir 返回 /home/polaris,而 Base 返回 studygolang.go。
func Dir(path string) string
返回所在的目录。
func Base(path string) string
Base函数返回路径的最后一个元素。
func Ext(path string) string
Ext函数返回path文件扩展名。
Clean 函数通过单纯的词法操作返回和 path 代表同一地址的最短路径。
func Clean(path string) string
它会不断的依次应用如下的规则,直到不能再进行任何处理:
func Match(pattern, name string) (matched bool, err error)
Match 指示 name 是否和 shell 的文件模式匹配
pattern:
{ term }
term:
'*' 匹配 0 或多个非路径分隔符的字符
'?' 匹配 1 个非路径分隔符的字符
'[' [ '^' ] { character-range } ']'
字符组(必须非空)
c 匹配字符 c(c != '*', '?', '\\', '[')
'\\' c 匹配字符 c
character-range:
c 匹配字符 c(c != '\\', '-', ']')
'\\' c 匹配字符 c
lo '-' hi 匹配区间[lo, hi]内的字符
func Walk(root string, walkFn WalkFunc) error
Walk 函数会遍历 root 指定的目录下的文件树,对每一个该文件树中的目录和文件都会调用 walkFn,包括 root 自身。
_, filename, _, ok := runtime.Caller(0)
获取调用的文件path 包提供了对 /
分隔的路径的实用操作函数,filepath包实现了兼容各操作系统的文件路径的实用操作函数。
在 Unix 中,路径的分隔符是/
,但 Windows 是 \
。在使用 path 包时,应该总是使用 /
,不论什么系统。
path 包中提供的函数,filepath 都有提供,功能类似,但实现不同。
一般应该总是使用 filepath 包,而不是 path 包。