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

2.1 KiB
Raw Blame History

Go filepath 包基本使用

1.基本用法

/**
 * 返回所给路径的绝对路径
 * 输出绝对路径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.组合用法

/**
 * 获取主文件名嗯
 * 输出my.demo
 */
filename := "my.demo.jpg"
suffix := filepath.Ext(filename)
name = strings.TrimSuffix(filename, suffix)