分享
  1. 首页
  2. 文章

golang标准库之path

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

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

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

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏