美文网首页
golang标准库之path

golang标准库之path

作者: 风铃草613 | 来源:发表于2019-10-02 08:49 被阅读0次

    path实现了对斜杠分隔("/")的路径的实用操作函数。

    package main
    
    import (
        "fmt"
        "path"
    )
    
    func main() {
        // func IsAbs(path string) bool
        // IsAbs返回路径是否是一个绝对路径
        fmt.Println(path.IsAbs("/dev/null")) // true
    
        // func Split(path string) (dir, file string)
        // Split函数将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。如果路径中没有斜杠,函数返回值dir会设为空字符串
        fmt.Println(path.Split("http://static\\myfile.css")) // http:// static\myfile.css
        fmt.Println(path.Split("http:\\static\\myfile.css")) //  http:\static\myfile.css
    
        // func Join(elem ...string) string
        // Join函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略
        fmt.Println(path.Join("a", "b", "", "c")) // a/b/c
    
        // func Dir(path string) string
        // Dir返回路径除去最后一个路径元素的部分, 如果路径是空字符串,会返回"."
        fmt.Println(path.Dir("http:\\static\\myfile.css")) // .
        fmt.Println(path.Dir("http://static\\myfile.css")) // http:
    
        // func Base(path string) string
        // Base函数返回路径的最后一个元素。在提取元素前会求掉末尾的斜杠。如果路径是"",会返回".";如果路径是只有一个斜杆构成,会返回"/"。
        fmt.Println(path.Base("a/b/c")) // c
        fmt.Println(path.Base(""))      // .
        fmt.Println(path.Base("/"))     // /
    
        // func Ext(path string) string
        // Ext函数返回path文件扩展名。返回值是路径最后一个斜杠分隔出的路径元素的最后一个'.'起始的后缀(包括'.')。如果该元素没有'.'会返回空字符串
        fmt.Println(path.Ext("a/b/c"))      //
        fmt.Println(path.Base("a/b/c.css")) // c.css
    
        // func Clean(path string) string
        // Clean函数通过单纯的词法操作返回和path代表同一地址的最短路径
        // 1. 将连续的多个斜杠替换为单个斜杠
        // 2. 剔除每一个.路径名元素(代表当前目录)
        // 3. 剔除每一个路径内的..路径名元素(代表父目录)和它前面的非..路径名元素
        // 4. 剔除开始一个根路径的..路径名元素,即将路径开始处的"/.."替换为"/"
        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"
    
        // func Match(pattern, name string) (matched bool, err error)
        // 如果name匹配shell文件名模式匹配字符串,Match函数返回真。该模式匹配字符串语法为:
        // Match要求匹配整个name字符串,而不是它的一部分。只有pattern语法错误时,会返回ErrBadPattern。
        // pattern:
        //     { term }
        // term:
        //     '*'                                  匹配0或多个非/的字符
        //     '?'                                  匹配1个非/的字符
        //     '[' [ '^' ] { character-range } ']'  字符组(必须非空)支持三种格式[abc],[^abc],[a-c]
        //     c                                    匹配字符c(c != '*', '?', '\\', '[')
        //     '\\' c                               匹配字符c
        // character-range:
        //     c           匹配字符c(c != '\\', '-', ']')
        //     '\\' c      匹配字符c
        //     lo '-' hi   匹配区间[lo, hi]内的字符
    
        // * 字符测试实例
        fmt.Println(path.Match("*", "a"))        // true nil
        fmt.Println(path.Match("*", "sefesfe/")) // false nil
    
        // ? 字符测试实例
        fmt.Println(path.Match("a?b", "aab")) // true nil
        fmt.Println(path.Match("a?b", "a/b")) // false nil
    
        // [] 格式测试实例
        fmt.Println(path.Match("[abc][123]", "b2"))  // true nil
        fmt.Println(path.Match("[abc][1-3]", "b2"))  // true nil
        fmt.Println(path.Match("[abc][^123]", "b2")) // false nil
        fmt.Println(path.Match("[abc][^123]", "b4")) // true nil
    
        // 字符或者特殊用途字符(  \\   ?  *   [ )测试实例
        fmt.Println(path.Match("a\\\\", "a\\")) // true nil
        fmt.Println(path.Match("a\\[", "a["))   // true nil
        fmt.Println(path.Match("a\\?", "a?"))   // true nil
        fmt.Println(path.Match("a\\*", "a*"))   // true nil
        fmt.Println(path.Match("abc", "abc"))   // true nil
    }
    

    相关文章

      网友评论

          本文标题:golang标准库之path

          本文链接:https://www.haomeiwen.com/subject/zcpcuctx.html