path包提供了对路径进行各种操作的一系列函数(有8个),里面的函数都比较简单,甚至源码读起来都很轻松,里面的函数大多数自己就可以轻松实现,不过go还是把这些简单的函数加进了标准库
包:path
- 先看这些函数的作用
- func IsAbs(path string) bool // 判断路径是否是绝对路径
- func Split(path string) (dir, file string) //
将路径从最后一个斜杠后面位置分隔为两个部分(dir和file)并返回。如果路径中没有斜杠,函数返回值dir会设为空字符串,file会设为path。两个返回值满足path == dir+file。
- func Join(elem ...string) string // 将任意元素的路径拼接成一个路径,斜杠会自动加上,空字符串 会被忽略
- func Dir(path string) string // 返回路径除去最后一个路径的元素的部分,即该路径最后一个元素所在的目录
- func Base(path string) string // 获取路径的最后一个元素
- func Ext(path string) string // 获取路径文件的扩展名,.会一起返回
- func Clean(path string) string // 返回路径的最简短的表达方式,会对多余的.和..做处理
- func Match(pattern, name string) (matched bool, err error) // 如果name匹配shell文件名模式匹配字符串,Match函数返回真。该方法设计正则,这里不在浪费篇幅展示,用到的时候,再去查文档就行了
看了方法说明有些还是不清楚,下面展示例子:
package main
import (
"fmt"
"path"
)
func main() {
// 判断路径是否是绝对路径
fmt.Println("===判断路径是否是绝对路径==================")
fmt.Println(path.IsAbs("/home")) // true
fmt.Println(path.IsAbs("home")) // false
fmt.Println("(不适用windows系统)判断c:\\是否是绝对路径:", path.IsAbs("c:\\")) // false
// 对路径拆分
fmt.Println("===对路径拆分===================")
fmt.Println(path.Split("/usr/local/bin")) // /usr/local/ bin
fmt.Println(path.Split("usr/local/bin")) // usr/local/ bin
// 拼接路径(中间的空字符串会忽略)
fmt.Println("拼接路径:", path.Join("home", "dalgurak//", "", "log")) // /home/dalgurak/log
// 获取最后一个元素所在的目录
fmt.Println("===获取最后一个元素所在的目录==================")
fmt.Println(path.Dir("/home/dalgurak/")) // /home/dalgurak
fmt.Println(path.Dir("/home/dalgurak/app")) // /home/dalgurak
fmt.Println(path.Dir("/home/dalgurak/app/.")) // /home/dalgurak/app
// 获取路径的最后一个元素
fmt.Println("===获取路径的最后一个元素=================")
fmt.Println(path.Base("/home/dalgurak/app")) // app
fmt.Println(path.Base("/home/dalgurak/app/")) // app
fmt.Println(path.Base("/home/dalgurak/app/.")) // .
// 获取文件的扩展名
fmt.Println("===获取文件扩展名====================")
fmt.Println(path.Ext("/home/a.jpg")) // .jpg
fmt.Println(path.Ext("/home/a.")) // .
fmt.Println(path.Ext("/home/.")) // .
fmt.Println(path.Ext("/home/a")) //
// 获取路径的简短表达方式
fmt.Println("===获取路径的简短表达方式============")
fmt.Println(path.Clean("../home/a")) // ../home/a
fmt.Println(path.Clean("./home/a")) // home/a
}
下面验证结果:
path包只是一些简单处理路径的函数,在平时路径的处理,拼接用得还是有不少的地方