Go 标准库文档翻译:path 包¶
本文是 Go 标准库中 path 包文档的翻译, 原文地址为: https://golang.org/pkg/path/
变量¶
ErrBadPattern 用于指示一个 glob 模式出现了格式错误。
Base 函数¶
func Base(path string) string
返回路径的最后一个元素。
在提取最后一个元素之前, 路径末尾的斜杠会被移除。
如果路径为空, 那么返回 “.” 。 如果路径只由斜杠组成, 那么返回 “/” 。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Base("/a/b"))
}
示例执行结果:
b
Clean 函数¶
func Clean(path string) string
通过纯粹的词法处理, 返回一个等价于 path 的最短路径。 Clean 函数会根据以下规则进行迭代, 直到没有任何规则可以应用为止:
使用单个斜杠代替多个斜杠。
移除所有 . 路径名元素(当前目录)
移除所有内含的 .. 路径名元素(父目录),以及先于它的非 .. 元素。
移除所有以根路径方式存在的 .. 元素,也即是,使用 “/” 去替换路径开头的 “/..”
只有在 path 为根目录 “/” 的时候, 函数才会返回 “/” 。
如果函数的处理结果是一个空字符串, 那么它将返回字符串 “.” 作为结果。
更多信息请参考 Rob Pike 的 《Lexical File Names in Plan 9 or Getting Dot-Dot Right》 一文。
示例:
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))
}
}
示例执行结果:
lean("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"
Dir 函数¶
func Dir(path string) string
返回路径里面除最后一个元素之外的其他所有元素, 通常为路径的目录。
在使用 Split 丢弃最后一个元素之后, 路径将是清洁的(Cleaned), 并且所有末尾的斜杠都将被移除。
如果路径为空, 那么函数将返回 “.” 作为结果。
如果路径由任意多个斜杠后跟任意多个非斜杠字节组成(比如 //////qqq), 那么函数将返回单个斜杠。 在其他情况下, 函数返回的路径都不会以斜杠结束。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Dir("/a/b/c"))
}
示例执行结果:
/a/b
Ext 函数¶
func Ext(path string) string
返回路径使用的文件扩展名。
扩展名为路径最后一个由斜杠分割的元素的最后一个点之后; 如果路径的这个部分没有点, 那么它的扩展名为空。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Ext("/a/b/c/bar.css"))
}
示例执行结果:
.css
IsAbs 函数¶
func IsAbs(path string) bool
检查路径是否为绝对路径。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.IsAbs("/dev/null"))
}
示例执行结果:
true
Join 函数¶
func Join(elem ...string) string
将任意数量的路径元素拼接为单个路径, 并在有需要时添加用于分割的斜杠。
函数给出的结果路径是清洁的; 特别地, 所有空字符串都将被忽略。
示例:
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", "/c"))
}
示例执行结果:
a/b/c
a/b/c
a/b/c
a/b/c
Match 函数¶
func Match(pattern, name string) (matched bool, err error)
报告文件名是否与给定的 shell 文件名模式相匹配。 模式的语法为:
模式:
{ 匹配项 }
匹配项:
'*' 匹配任意长度的非 / 字符
'?' 匹配单个非 / 字符
'[' [ '^' ] { 字符范围 } ']'
字符类型必须是非空的
c 匹配不等于 '*' 、 '?' 、 '\\' 和 '[' 的字符 c
'\\' c 匹配字符 c
字符范围
c 匹配不等于 '\\' 、 '-' 、 和 ']' 的字符 c
'\\' c 匹配字符 c
lo '-' hi 匹配字符 c ,其中 lo <= c <= hi
Match 要求模式与文件名完全匹配, 而不是部分匹配。
函数唯一可能返回的错误为 ErrBadPattern , 这个错误用于表示给定的模式有误。
Split 函数¶
func Split(path string) (dir, file string)
根据路径的最后一个斜杠, 将路径划分为目录部分和文件名部分。
如果路径中不包含斜杠, 那么返回一个空的目录, 并将文件名部分设置为路径本身。
返回值满足这样一个属性, 也即是, path = dir + file 。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Split("static/myfile.css"))
}
示例执行结果:
static/ myfile.css
License¶
Portions of this page are modifications based on work created and shared by Google and used according to terms described in the Creative Commons 3.0 Attribution License .