[基础库] path包使用

Go标准库中自带path包使用说明:

Package path implements utility routines for manipulating slash-separated paths.
The path package should only be used for paths separated by forward slashes, such as the paths in URLs. This package does not deal with Windows paths with drive letters or backslashes; to manipulate operating system paths, use the path/filepath package.

包路径实现了用于操作斜杠分隔路径的实用程序。
path 包只能用于由正斜杠分隔的路径,例如 URL 中的路径。 此软件包不处理带有驱动器号或反斜杠的 Windows 路径; 要操作操作系统路径,请使用 path/filepath 包。
官方文档

核心要点

  • path包包含了以/分割的路径处理操作
  • 将路径字符串以/分割后,按每个元素来处理
  • dir是目录,输出时会剔除尾部的/
  • .../均为特殊处理case

函数列表:

  • func Base(path string) string: 返回路径中的最后一个元素
  • func Clean(path string) string: 标准化path处理
  • func Dir(path string) string: 获取路径的目录
  • func Ext(path string) string: 获取路径的文件名后缀
  • func IsAbs(path string) bool: 是否绝对路径
  • func Join(elem …string) string:路径拼接
  • func Match(pattern, name string) (matched bool, err error):路径name是否匹配shell格式的pattern
  • func Split(path string) (dir, file string): 将全路径分割为目录和文件名

func Base(path string) string

函数说明:

  • Base返回路径中的最后一个元素
  • 将路径path/拆分后,最后一个元素为basename
  • 和Linux中命令basename操作一致

注意事项:

  • 空字符串时返回’.’
  • 全斜线(一个或多个)的字符串返回’/‘
  • 结尾的/将会被移除,也就是说Base{"/home/"}Base{"/home"}返回结果一样,都是"home"

func Clean(path string) string

函数说明:
作用:路径标准化处理,返回等价的最短路径

  • 多个连续/合并为单个
  • 消除当前目录的.标识
  • 消除..路径元素和它之前的非..元素
  • 将根路径下的/..替换为/
  • 只有当路径为/时返回路径才会以/结尾
  • 空路径处理后返回.
1
2
3
4
5
6
7
8
// 处理效果,可执行源码参见[path#example-Clean](https://pkg.go.dev/path#example-Clean)
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

作用:获取路径中的目录

  • 返回路径中除最后一个元素外的路径,通常未path指向的目录
  • 通过Split分割路径,剔除最后一个元素和结尾的/
  • 路径为空,则返回.
  • 除下述情况返回以/结尾外,其他情况均不会返回以/结尾
    • path为多个连续/,后跟非/元素,入////foo将返回/

func Ext(path string) string

作用:获取路径中的文件扩展名

  • 获取路径中的文件扩展名
  • 扩展名是/分割的最后一个元素中,以最末尾的.开始的后缀部分
  • 如果最后一个元素没有.,则返回空

func IsAbs(path string) bool

作用:判断输出path是否为绝对路径

绝对路径:只有以/开始的全路径才是绝对路径

func Join(elem ...string) string

作用:路径拼接

  • 使用/拼接多个元素为路径
  • 空元素将被忽略
  • 返回结果会调用Clean()标准化处理
  • 如果多个入参均为空字符串,则返回结果也为空字符串

func Match(pattern, name string) (matched bool, err error)

作用:路径name是否匹配shell格式的pattern

func Split(path string) (dir, file string)

作用:将全路径分割为目录和文件名

  • 按最后一个/进行路径分割,分割为目录和文件名两部分
  • 如果路径中没有/,则返回目录为空、文件名=path
  • path = dir + file

参考阅读