filepath
包提供了用于解析和构建文件路径的函数,这些函数可以在不同操作系统之间移植使用。例如,Linux 上的路径格式是 dir/file
,而 Windows 上是 dir\\file
。
package main
import (
"fmt"
"path/filepath"
"strings"
)
func main() {
// 使用 Join 来以可移植的方式构建路径。它接受任意数量的参数,并根据这些参数构建一个层次化的路径。
p := filepath.Join("dir1", "dir2", "filename")
fmt.Println("p:", p)
// 你应该始终使用 Join,而不是手动拼接 / 或 \\。除了提供可移植性外,Join 还会通过删除多余的路径分隔符和目录更改来规范化路径。
fmt.Println(filepath.Join("dir1//", "filename"))
fmt.Println(filepath.Join("dir1/../dir1", "filename"))
// Dir 和 Base 可以用来将路径拆分为目录和文件部分。或者,你也可以使用 Split,它会在一次调用中同时返回这两部分。
fmt.Println("Dir(p):", filepath.Dir(p))
fmt.Println("Base(p):", filepath.Base(p))
// 我们可以检查一个路径是否是绝对路径。
fmt.Println(filepath.IsAbs("dir/file"))
fmt.Println(filepath.IsAbs("/dir/file"))
filename := "config.json"
// 某些文件名在点号后带有扩展名。我们可以使用 Ext 将扩展名从这些文件名中分离出来。
ext := filepath.Ext(filename)
fmt.Println(ext)
// 要获取不带扩展名的文件名,可以使用 strings.TrimSuffix。
fmt.Println(strings.TrimSuffix(filename, ext))
// Rel 用于查找基准路径和目标路径之间的相对路径。如果目标路径无法相对于基准路径表示,它将返回一个错误。
rel, err := filepath.Rel("a/b", "a/b/t/file")
if err != nil {
panic(err)
}
fmt.Println(rel)
rel, err = filepath.Rel("a/b", "a/c/t/file")
if err != nil {
panic(err)
}
fmt.Println(rel)
}
运行结果:
➜ go run file-paths/file-paths.go
p: dir1/dir2/filename
dir1/filename
dir1/filename
Dir(p): dir1/dir2
Base(p): filename
false
true
.json
config
t/file
../c/t/file
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。