path
path
https://pkg.go.dev/path@go1.20.1
path包实现了用于操作斜杠分隔路径的实用程序函数。
path包仅用于由正斜杠分隔的路径,例如URL中的路径。该包不处理带有驱动器字母或反斜杠的Windows路径;要操作操作系统路径,请使用path/filepath包。
常量
This section is empty.
变量
View Source
1
| var ErrBadPattern = errors.New("syntax error in pattern")
|
ErrBadPattern表示模式格式不正确。
函数
func Base
1
| func Base(path string) string
|
Base函数返回path的最后一个元素。在提取最后一个元素之前,尾部的斜杠将被删除。如果路径为空,则Base返回"."。如果路径完全由斜杠组成,则Base返回"/"。
Base Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Base("/a/b"))
fmt.Println(path.Base("/"))
fmt.Println(path.Base(""))
}
Output:
b
/
.
|
func Clean
1
| func Clean(path string) string
|
Clean函数通过纯词法处理返回与path等效的最短路径名。它迭代地应用以下规则,直到不能再进行进一步的处理:
- 将多个斜杠替换为单个斜杠。
- 消除每个". “路径名元素(当前目录)。
- 消除每个”..“路径名元素(上一级目录)以及其前面的非”..“元素。
- 消除以根路径开头的”..“元素:即,在路径开头用”/“替换”/.."。
返回的路径仅在根"/“的情况下以斜杠结尾。
如果此过程的结果是空字符串,则Clean返回字符串”."。
请参见Rob Pike,“Plan 9中的词法文件名或正确处理点-点”,https://9p.io/sys/doc/lexnames.html
Clean Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| package main
import (
"fmt"
"path"
)
func main() {
paths := []string{
"a/c",
"a//c",
"a/c/.",
"a/c/b/..",
"/../a/c",
"/../a/b/../././/c",
"",
}
for _, p := range paths {
fmt.Printf("Clean(%q) = %q\n", p, path.Clean(p))
}
}
Output:
Clean("a/c") = "a/c"
Clean("a//c") = "a/c"
Clean("a/c/.") = "a/c"
Clean("a/c/b/..") = "a/c"
Clean("/../a/c") = "/a/c"
Clean("/../a/b/../././/c") = "/a/c"
Clean("") = "."
|
func Dir
1
| func Dir(path string) string
|
Dir函数返回路径path中除去最后一个元素后的路径(即路径的目录部分)。使用Split去掉最后一个元素,然后将路径清理并删除尾部的斜杠。如果路径为空,则Dir返回"."。如果路径由一系列斜杠后跟非斜杠字符组成,则Dir返回单个斜杠。在任何其他情况下,返回的路径不以斜杠结尾。
Dir Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Dir("/a/b/c"))
fmt.Println(path.Dir("a/b/c"))
fmt.Println(path.Dir("/a/"))
fmt.Println(path.Dir("a/"))
fmt.Println(path.Dir("/"))
fmt.Println(path.Dir(""))
}
Output:
/a/b
a/b
/a
a
/
.
|
func Ext
1
| func Ext(path string) string
|
Ext函数返回路径path的文件扩展名。扩展名是路径的最终斜杠分隔元素中最后一个点号开始的后缀;如果没有点,则为空。
Ext Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Ext("/a/b/c/bar.css"))
fmt.Println(path.Ext("/"))
fmt.Println(path.Ext(""))
}
Output:
.css
|
func IsAbs
1
| func IsAbs(path string) bool
|
IsAbs函数报告路径path是否是绝对路径。
IsAbs Example
1
2
3
4
5
6
7
8
9
10
11
12
13
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.IsAbs("/dev/null"))
}
Output:
true
|
func Join
1
| func Join(elem ...string) string
|
Join函数将任意数量的路径元素连接成单个路径,使用斜杠进行分隔。忽略空元素。结果会被清理。但是,如果参数列表为空或其所有元素都为空,则Join返回一个空字符串。
Join Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Join("a", "b", "c"))
fmt.Println(path.Join("a", "b/c"))
fmt.Println(path.Join("a/b", "c"))
fmt.Println(path.Join("a/b", "../../../xyz"))
fmt.Println(path.Join("", ""))
fmt.Println(path.Join("a", ""))
fmt.Println(path.Join("", "a"))
}
Output:
a/b/c
a/b/c
a/b/c
../xyz
a
a
|
func Match
1
| func Match(pattern, name string) (matched bool, err error)
|
Match函数报告name是否与shell模式匹配。模式语法是:
pattern:
{ term }
term:
'*' 匹配任何非/字符的序列
'?' 匹配任何单个非/字符
'[' [ '^' ] { character-range } ']'
字符类(必须非空)
c 匹配字符c (c != '*', '?', '\\', '[')
'\\' c 匹配字符c
character-range:
c 匹配字符c (c != '\\', '-', ']')
'\\' c 匹配字符c
lo '-' hi 匹配区间[lo,hi]内的字符c(lo <= c <= hi)
Match函数要求pattern与name完全匹配,而不仅仅是子字符串。可能返回的唯一错误是ErrBadPattern,当pattern格式不正确时。
Match Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
| package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Match("abc", "abc"))
fmt.Println(path.Match("a*", "abc"))
fmt.Println(path.Match("a*/b", "a/c/b"))
}
Output:
true <nil>
true <nil>
false <nil>
|
func Split
1
| func Split(path string) (dir, file string)
|
Split函数在最后一个斜杠后立即拆分path,将其分成目录和文件名两个组成部分。如果path中没有斜杠,则Split返回一个空目录和一个文件名设置为path的文件名。返回值的属性为path = dir + file。
Split Example
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| package main
import (
"fmt"
"path"
)
func main() {
split := func(s string) {
dir, file := path.Split(s)
fmt.Printf("path.Split(%q) = dir: %q, file: %q\n", s, dir, file)
}
split("static/myfile.css")
split("myfile.css")
split("")
}
Output:
path.Split("static/myfile.css") = dir: "static/", file: "myfile.css"
path.Split("myfile.css") = dir: "", file: "myfile.css"
path.Split("") = dir: "", file: ""
|
类型
This section is empty.