2021-04-14 10:27:12 +08:00
|
|
|
|
# Go filepath 包基本使用
|
|
|
|
|
|
2021-08-30 14:22:03 +08:00
|
|
|
|
## 1.基本用法
|
|
|
|
|
|
2021-04-14 10:27:12 +08:00
|
|
|
|
```go
|
|
|
|
|
/**
|
|
|
|
|
* 返回所给路径的绝对路径
|
2021-08-30 14:22:03 +08:00
|
|
|
|
* 输出绝对路径:F:\my\bin\log.txt
|
2021-04-14 10:27:12 +08:00
|
|
|
|
*/
|
|
|
|
|
path, _ := filepath.Abs("./log.txt")
|
|
|
|
|
fmt.Println(path)
|
|
|
|
|
|
2021-08-30 14:22:03 +08:00
|
|
|
|
/**
|
|
|
|
|
* 获取 targpath 相对于 basepath 的路径。要求 targpath 和 basepath 必须“都是相对路径”或“都是绝对路径”。
|
|
|
|
|
* 输出:d/e <nil>
|
|
|
|
|
*/
|
|
|
|
|
s, err := filepath.Rel("/a/b/c", "/a/b/c/d/e")
|
|
|
|
|
fmt.Println(s, err)
|
|
|
|
|
|
2021-04-14 10:27:12 +08:00
|
|
|
|
/**
|
|
|
|
|
* 返回所给路径的相对路径
|
|
|
|
|
*/
|
|
|
|
|
filepath.Dir(path)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 返回路径最后一个元素
|
2021-08-30 14:22:03 +08:00
|
|
|
|
* 输出:log.txt
|
2021-04-14 10:27:12 +08:00
|
|
|
|
*/
|
|
|
|
|
fmt.Println(filepath.Base("./log.txt"))
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 返回路径中的扩展名
|
2021-08-30 14:22:03 +08:00
|
|
|
|
* 输出:.jpg
|
2021-04-14 10:27:12 +08:00
|
|
|
|
*/
|
|
|
|
|
fmt.Println(filepath.Ext("./a/b/c/d.jpg"))
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 分割目录和文件
|
2021-08-30 14:22:03 +08:00
|
|
|
|
* 输出:C:/a/b/c/ d.jpg
|
2021-04-14 10:27:12 +08:00
|
|
|
|
*/
|
|
|
|
|
dir, file := filepath.Split("C:/a/b/c/d.jpg")
|
|
|
|
|
fmt.Println(dir, file)
|
2021-08-30 14:22:03 +08:00
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 分割目录和文件
|
|
|
|
|
* 输出:a/b/ /d
|
|
|
|
|
*/
|
|
|
|
|
s := filepath.Clean("a/./b/:::/..// /c/..////d///")
|
|
|
|
|
fmt.Println(s)
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 将 elem 中的多个元素合并为一个路径,忽略空元素,清理多余字符。
|
|
|
|
|
* 输出:a/b/c
|
|
|
|
|
*/
|
|
|
|
|
fmt.Println(filepath.Join("a", "b/c"))
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 判断 name 是否和指定的模式 pattern 完全匹配。
|
|
|
|
|
* 可以使用 ? 匹配单个任意字符(不匹配路径分隔符)。
|
|
|
|
|
* 可以使用 * 匹配 0 个或多个任意字符(不匹配路径分隔符)。
|
|
|
|
|
* 可以使用 [] 匹配范围内的任意一个字符(可以包含路径分隔符)。
|
|
|
|
|
* 可以使用 [^] 匹配范围外的任意一个字符(无需包含路径分隔符)。
|
|
|
|
|
* [] 之内可以使用 - 表示一个区间,比如 [a-z] 表示 a-z 之间的任意一个字符。
|
|
|
|
|
* 反斜线用来匹配实际的字符,比如 \* 匹配 *,\[ 匹配 [,\a 匹配 a 等等。
|
|
|
|
|
* [] 之内可以直接使用 [ * ?,但不能直接使用 ] -,需要用 \]、\- 进行转义。
|
|
|
|
|
* 输出:
|
|
|
|
|
* 1-true
|
|
|
|
|
* 2-false
|
|
|
|
|
*/
|
|
|
|
|
filepath.Match("/home/catch/*", "/home/catch/foo")
|
|
|
|
|
filepath.Match("/home/catch/*", "/home/catch/foo/bar")
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 2.组合用法
|
|
|
|
|
|
|
|
|
|
```go
|
|
|
|
|
/**
|
|
|
|
|
* 获取主文件名嗯
|
|
|
|
|
* 输出:my.demo
|
|
|
|
|
*/
|
|
|
|
|
filename := "my.demo.jpg"
|
|
|
|
|
suffix := filepath.Ext(filename)
|
|
|
|
|
name = strings.TrimSuffix(filename, suffix)
|
2021-04-14 10:27:12 +08:00
|
|
|
|
```
|