# Go filepath 包基本使用 ## 1.基本用法 ```go /** * 返回所给路径的绝对路径 * 输出绝对路径:F:\my\bin\log.txt */ path, _ := filepath.Abs("./log.txt") fmt.Println(path) /** * 获取 targpath 相对于 basepath 的路径。要求 targpath 和 basepath 必须“都是相对路径”或“都是绝对路径”。 * 输出:d/e */ 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) ```