go.path/filepath — 兼容操作系统的文件路径操作

path/filepath 包涉及到路径操作时,路径分隔符使用 os.PathSeparator。不同系统,路径表示方式有所不同,比如 Unix 和 Windows 差别很大。本包能够处理所有的文件路径,不管是什么系统。

注意,路径操作函数并不会校验路径是否真实存在。

path

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

相对路径和绝对路径

func IsAbs

func IsAbs(path string) bool

返回路径是否是一个绝对路径。

func Abs

func Abs(path string) (string, error)

Abs函数返回path代表的绝对路径

路径的切分和拼接

func Split

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

Split函数将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。如果路径中没有斜杠,函数返回值dir会设为空字符串,file会设为path。两个返回值满足path == dir+file。

func Join

func Join(elem ...string) string

Join函数可以将任意数量的路径元素放入一个单一路径里,会根据需要添加斜杠。结果是经过简化的,所有的空字符串元素会被忽略。

func SplitList

func SplitList(path string) []string

有时,我们需要分割 PATH 或 GOPATH 之类的环境变量(这些路径被特定于 OS 的列表分隔符连接起来),filepath.SplitList 就是这个用途:

与 strings.Split 函数的不同之处是:对 "",SplitList 返回[]string{},而 strings.Split 返回 []string{""}。SplitList 内部调用的是 strings.Split。

解析路径名字符串

  1. Dir() 和 Base() 函数将一个路径名字符串分解成目录和文件名两部分。

  2. 比如,给定路径名 /home/polaris/studygolang.go,Dir 返回 /home/polaris,而 Base 返回 studygolang.go。

func Dir

func Dir(path string) string

返回所在的目录。

func Base

func Base(path string) string

Base函数返回路径的最后一个元素。

func Ext

func Ext(path string) string

Ext函数返回path文件扩展名。

规整化路径

func Clean

Clean 函数通过单纯的词法操作返回和 path 代表同一地址的最短路径。

func Clean(path string) string

它会不断的依次应用如下的规则,直到不能再进行任何处理:

  1. 将连续的多个路径分隔符替换为单个路径分隔符
  2. 剔除每一个 . 路径名元素(代表当前目录)
  3. 剔除每一个路径内的 … 路径名元素(代表父目录)和它前面的非 … 路径名元素
  4. 剔除开始于根路径的 … 路径名元素,即将路径开始处的 /… 替换为 /(假设路径分隔符是 /)

文件路径匹配

func Match

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

Match 指示 name 是否和 shell 的文件模式匹配

pattern:
    { term }
term:
    '*'         匹配 0 或多个非路径分隔符的字符
    '?'         匹配 1 个非路径分隔符的字符
    '[' [ '^' ] { character-range } ']'  
                  字符组(必须非空)
    c           匹配字符 c(c != '*', '?', '\\', '[''\\' c      匹配字符 c
character-range:
    c           匹配字符 c(c != '\\', '-', ']''\\' c      匹配字符 c
    lo '-' hi   匹配区间[lo, hi]内的字符

遍历目录

func Walk

func Walk(root string, walkFn WalkFunc) error

Walk 函数会遍历 root 指定的目录下的文件树,对每一个该文件树中的目录和文件都会调用 walkFn,包括 root 自身。

获取当前路径

  1. os.Getwd()`获取当前目录的绝对路径
  2. _, filename, _, ok := runtime.Caller(0)获取调用的文件

总结

  1. path 包提供了对 /分隔的路径的实用操作函数,filepath包实现了兼容各操作系统的文件路径的实用操作函数。

  2. 在 Unix 中,路径的分隔符是/,但 Windows 是 \。在使用 path 包时,应该总是使用 /,不论什么系统。

  3. path 包中提供的函数,filepath 都有提供,功能类似,但实现不同。

  4. 一般应该总是使用 filepath 包,而不是 path 包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Generalzy

文章对您有帮助,倍感荣幸

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值