先看标准库
作用:关于路径的一些实用操作
https://github.com/golang/go/blob/master/src/path/path.go 源码地址
func IsAbs
func IsAbs(path string) bool
IsAbs返回路径是否是一个绝对路径。
源码如下:
func IsAbs(path string) bool { return len(path) > 0 && path[0] == '/' }
非常简单,return 了个bool , 判断条件是path大于零并且绝对路径是以‘/’开头。
func Split
func Split(path string) (dir, file string)
Split函数将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。如果路径中没有斜杠,函数返回值dir会设为空字符串,file会设为path。两个返回值满足path == dir+file。
源码如下:
func Split(path string) (dir, file string) { i := strings.LastIndex(path, "/") return path[:i+1], path[i+1:] }
也很简单和官方给的函数介绍一样,LastIndex找到最后一个“/”匹配成功的位置,找不到i == -1 。
func Join
func Join(elem ...string) string
Join函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略。
func Join(elem ...string) string { for i, e := range elem { if e != "" { return Clean(strings.Join(elem[i:], "/")) } } return "" }
输入的elem是slice通过strings.Join 用“/”连接起来,再用Clean清理不必要的字符。
func Dir
func Dir(path string) string
Dir返回路径除去最后一个路径元素的部分,即该路径最后一个元素所在的目录。在使用Split去掉最后一个元素后,会简化路径并去掉末尾的斜杠。如果路径是空字符串,会返回".";如果路径由1到多个斜杠后跟0到多个非斜杠字符组成,会返回"/";其他任何情况下都不会返回以斜杠结尾的路径。
func Dir(path string) string { dir, _ := Split(path) return Clean(dir) }
这也很简单没啥好说的 最后用Clean 清理了不必要的“/”
func Base
func Base(path string) string
Base函数返回路径的最后一个元素。在提取元素前会求掉末尾的斜杠。如果路径是"",会返回".";如果路径是只有一个斜杆构成,会返回"/"。
1 func Base(path string) string { 2 if path == "" { 3 return "." 4 } 5 // Strip trailing slashes. 6 for len(path) > 0 && path[len(path)-1] == '/' { 7 path = path[0 : len(path)-1] 8 } 9 // Find the last element 10 if i := strings.LastIndex(path, "/"); i >= 0 { 11 path = path[i+1:] 12 } 13 // If empty now, it had only slashes. 14 if path == "" { 15 return "/" 16 } 17 return path 18 }
行2 判断地址是否为空
行3当地址长度大于0 并且地址尾部是“/”时去除尾部“/”
行10 将末尾的元素给path
func Ext
func Ext(path string) string
Ext函数返回path文件扩展名。返回值是路径最后一个斜杠分隔出的路径元素的最后一个'.'起始的后缀(包括'.')。如果该元素没有'.'会返回空字符串。
1 func Ext(path string) string { 2 for i := len(path) - 1; i >= 0 && path[i] != '/'; i-- { 3 if path[i] == '.' { 4 return path[i:] 5 } 6 } 7 return "" 8 }
文件扩展名在"."之后,行2循环找到.的位置i 返回i后面的元素,找不到返回空字符串
func Clean
func Clean(path string) string
Clean函数通过单纯的词法操作返回和path代表同一地址的最短路径。
它会不断的依次应用如下的规则,直到不能再进行任何处理:
1. 将连续的多个斜杠替换为单个斜杠 2. 剔除每一个.路径名元素(代表当前目录) 3. 剔除每一个路径内的..路径名元素(代表父目录)和它前面的非..路径名元素 4. 剔除开始一个根路径的..路径名元素,即将路径开始处的"/.."替换为"/"
只有路径代表根地址"/"时才会以斜杠结尾。如果处理的结果是空字符串,Clean会返回"."。
clean源码好复杂我也没细看,主要就是去除多余的“/”等
func Match
func Match(pattern, name string) (matched bool, err error)
如果name匹配shell文件名模式匹配字符串,Match函数返回真。
Match就是路径模式匹配详看标准库。