1. 概述说明
import "path"
path
实现了对斜杠分隔的路径的实用操作函数。
2. 主要函数
2.1 func IsAbs
func IsAbs(path string) bool
IsAbs
返回路径是否是一个绝对路径。
2.2 func Split
func Split(path string) (dir, file string)
Split
函数将路径从最后一个斜杠后面位置分隔为两个部分( dir
和 file
)并返回。如果路径中没有斜杠,函数返回值 dir
会设为空字符串, file
会设为 path
。两个返回值满足 path == dir+file
。
2.3 func Join
func Join(elem ...string) string
Join
函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略。
2.4 func Dir
func Dir(path string) string
Dir
返回路径除去最后一个路径元素的部分,即该路径最后一个元素所在的目录。在使用 Split
去掉最后一个元素后, 会简化路径并去掉末尾的斜杠。
- 如果路径是空字符串,会返回
.
; - 如果路径由 1 到多个斜杠后跟 0 到多个非斜杠字符组成,会返回
/
; - 其他任何情况下都不会返回以斜杠结尾的路径;
2.5 func Base
func Base(path string) string
Base
函数返回路径的最后一个元素。在提取元素前会求掉末尾的斜杠。
- 如果路径是"",会返回".";
- 如果路径是只有 一个斜杆构成,会返回
/
;
2.6 func Ext
func Ext(path string) string
Ext
函数返回 path
文件扩展名。返回值是路径最后一个斜杠分隔出的路径元素的最后一个 .
起始的后缀(包括 .
) 。如果该元素没有 .
会返回空字符串。
2.7 func Clean
func Clean(path string) string
Clean
函数通过单纯的词法操作返回和 path
代表同一地址的最短路径。
它会不断的依次应用如下的规则,直到不能再进行任何处理:
- 将连续的多个斜杠替换为单个斜杠
- 剔除每一个
.
路径名元素(代表当前目录) - 剔除每一个路径内的
..
路径名元素(代表父目录)和它前面的非..
路径名元素 - 剔除开始一个根路径的
..
路径名元素,即将路径开始处的/..
替换为/
只有路径代表根地址 /
时才会以斜杠结尾。如果处理的结果是空字符串, Clean
会返回 .
。
2.8 func Match
func Match(pattern, name string) (matched bool, err error)
如果 name
匹配 shell
文件名模式匹配字符串, Match
函数返回真。该模式匹配字符串语法为:
pattern:
{ term }
term:
‘*’ 匹配0或多个非/的字符
‘?’ 匹配1个非/的字符
‘[’ [ ‘^’ ] { character-range } ‘]’ 字符组(必须非空)
c 匹配字符c(c != ‘*’, ‘?’, ‘\’, ‘[’)
‘\’ c 匹配字符c
character-range:
c 匹配字符c(c != ‘\’, ‘-’, ‘]’)
‘\’ c 匹配字符c
lo ‘-’ hi 匹配区间[lo, hi]内的字符
Match
要求匹配整个 name
字符串,而不是它的一部分。只有 pattern
语法错误时,会返回 ErrBadPattern
。
3. 代码示例
以下代码在 Windows 平台执行,可以看出有很多输出和实际预期的并不一致。
func main() {
absFlag := path.IsAbs("./")
fmt.Println("absFlag is ", absFlag) // absFlag is false
dir, file := path.Split("E:\\golang\\src\\temp.go")
fmt.Println("dir is ", dir, "file is ", file) // dir is file is E:\golang\src\temp.go
fullPath := path.Join("E:", "golang", "src", "temp.go")
fmt.Println("fullPath is ", fullPath) // fullPath is E:/golang/src/temp.go
dirPath := path.Dir("E:\\golang\\src\\temp.go")
fmt.Println("dirPath is ", dirPath) // dirPath is .
baseName := path.Base("E:\\golang\\src\\temp.go")
fmt.Println("baseName is ", baseName) // baseName is E:\golang\src\temp.go
extName := path.Ext("E:\\golang\\src\\temp.go")
fmt.Println("extName is ", extName) // extName is .go
fmt.Println(path.Clean("./a/b/../")) // a
fmt.Println(path.Match("*", "a")) // true <nil>
fmt.Println(path.Match("*", "a/b/c")) // false <nil>
fmt.Println(path.Match("\\b", "b")) // true <nil>
}
将 import "path"
替换为 "path/filepath"
,并将代码中的 path
替换为 filepath
,就可以得到预期的结果。因为 filepath
包实现了兼容各操作系统的文件路径的实用操作函数。
参考:
https://www.cnblogs.com/jkko123/p/6923962.html
https://studygolang.com/static/pkgdoc/pkg/path.htm