NotePublic/Software/Development/Language/Go/Package/Path/Go_filepath_包基本使用.md

85 lines
2.1 KiB
Markdown
Raw Normal View History

# Go filepath 包基本使用
## 1.基本用法
```go
/**
* 返回所给路径的绝对路径
* 输出绝对路径F:\my\bin\log.txt
*/
path, _ := filepath.Abs("./log.txt")
fmt.Println(path)
/**
* 获取 targpath 相对于 basepath 的路径。要求 targpath 和 basepath 必须“都是相对路径”或“都是绝对路径”。
* 输出d/e <nil>
*/
s, err := filepath.Rel("/a/b/c", "/a/b/c/d/e")
fmt.Println(s, err)
/**
* 返回所给路径的相对路径
*/
filepath.Dir(path)
/**
* 返回路径最后一个元素
* 输出log.txt
*/
fmt.Println(filepath.Base("./log.txt"))
/**
* 返回路径中的扩展名
* 输出:.jpg
*/
fmt.Println(filepath.Ext("./a/b/c/d.jpg"))
/**
* 分割目录和文件
* 输出C:/a/b/c/ d.jpg
*/
dir, file := filepath.Split("C:/a/b/c/d.jpg")
fmt.Println(dir, file)
/**
* 分割目录和文件
* 输出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)
```