golang标准库之path

aside section ._1OhGeD · · 3329 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:golang标准库之path

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3329 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传