golang的path
Posted 宜技之长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang的path相关的知识,希望对你有一定的参考价值。
简述
path 包实现了一系列实用函数, 这些函数可以对实用斜杠进行分隔的路径进行处理。
函数
func Base(path string) string
返回路径的最后一个元素。
在提取最后一个元素之前, 路径末尾的斜杠会被移除。
如果路径为空, 那么返回 “.” 。 如果路径只由斜杠组成, 那么返回 “/” 。
示例
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println("结果", path.Base("/a/b/c"))
}
// 结果 c
func Clean(path string) string
通过纯粹的词法处理, 返回一个等价于 path 的最短路径。 Clean 函数会根据以下规则进行迭代, 直到没有任何规则可以应用为止:
使用单个斜杠代替多个斜杠。
移除所有 . 路径名元素(当前目录)
移除所有内含的 .. 路径名元素(父目录),以及先于它的非 .. 元素。
移除所有以根路径方式存在的 .. 元素,也即是,使用 “/” 去替换路径开头的 “/..”
只有在 path 为根目录 “/” 的时候, 函数才会返回 “/” 。
如果函数的处理结果是一个空字符串, 那么它将返回字符串 “.” 作为结果。
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))
}
}
//结果
//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(path string) string
返回路径里面除最后一个元素之外的其他所有元素, 通常为路径的目录。
在使用 Split 丢弃最后一个元素之后, 路径将是清洁的(Cleaned), 并且所有末尾的斜杠都将被移除。
如果路径为空, 那么函数将返回 “.” 作为结果。
如果路径由任意多个斜杠后跟任意多个非斜杠字节组成(比如 //////qqq), 那么函数将返回单个斜杠。 在其他情况下, 函数返回的路径都不会以斜杠结束。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Dir("/a/b/c"))
}
// 结果
// /a/b
func Ext(path string) string
返回路径使用的文件扩展名。
扩展名为路径最后一个由斜杠分割的元素的最后一个点之后; 如果路径的这个部分没有点, 那么它的扩展名为空。
示例:
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.Ext("/a/b/c/bar.css"))
}
// 结果
//.css
IsAbs 函数
package main
import (
"fmt"
"path"
)
func main() {
fmt.Println(path.IsAbs("/dev/null"))
}
// 结果
// true
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
func Match(pattern, name string) (matched bool, err error)
模式:
{ 匹配项 }
匹配项:
'*' 匹配任意长度的非 / 字符
'?' 匹配单个非 / 字符
'[' [ '^' ] { 字符范围 } ']'
字符类型必须是非空的
c 匹配不等于 '*' 、 '?' 、 '\\' 和 '[' 的字符 c
'\\' c 匹配字符 c
字符范围
c 匹配不等于 '\\' 、 '-' 、 和 ']' 的字符 c
'\\' c 匹配字符 c
lo '-' hi 匹配字符 c ,其中 lo <= c <= hi
// 结果
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
以上是关于golang的path的主要内容,如果未能解决你的问题,请参考以下文章