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)
}
|