package main
import (
"fmt"
"path/filepath"
)
func main() {
basePath := "/home/user"
subPaths := []string{"documents", "project", "src"}
fullPath := basePath
for _, subPath := range subPaths {
fullPath = filepath.Join(fullPath, subPath)
}
fmt.Println(fullPath)
}
为什么使用 filepath
包而不是简单字符串拼接
- 跨平台兼容性:不同操作系统使用不同的路径分隔符,如Windows使用反斜杠(
\
),而Unix系统使用正斜杠(/
)。filepath
包能够根据运行的操作系统自动选择正确的路径分隔符进行拼接,保证代码在不同平台上的一致性和正确性。例如,filepath.Join("a", "b")
在Windows上会返回 a\b
,在Unix系统上会返回 a/b
。
- 路径规范化:
filepath
包提供了路径规范化的功能,比如去除多余的分隔符、处理相对路径和绝对路径等情况。例如 filepath.Clean("/a//b/../c")
会返回 /a/c
,而简单字符串拼接无法处理这些复杂情况。
- 安全性:简单字符串拼接容易引入安全漏洞,比如路径遍历攻击。
filepath
包在处理路径时会遵循操作系统的规则,有助于防止此类安全问题。