3 回答
TA贡献1862条经验 获得超6个赞
有什么区别?
虽然功能相似,但path和path/filepath提供不同的实现。Filepath在处理路径字符串时依赖于os包来选择目标运行时的文件分隔符和其他不同的组件。
您可以查看os 源代码,以了解各种实用功能的不同实现。这允许库抽象出操作系统特定的细节,并有助于实现可移植性。路径/文件路径 依赖图说明了包如何依赖于os包。您可以将此与路径 依赖图进行比较。我鼓励你进入文件路径和路径源代码来观察这种关系。
我什么时候使用每个?
处理文件时应该使用文件路径。这确保您的路径将与实际文件匹配,而不管底层运行时如何。路径库应该在模型中或者路径可以被序列化或与其他程序通信时使用。这确保了无论程序运行在什么平台上,都使用单一的格式化方案。具有一致的格式使得对模型的推理更加通用且更易于理解。
TA贡献1836条经验 获得超3个赞
https://pkg.go.dev/path
包路径实现了用于操作斜杠分隔路径的实用程序。
path 包只能用于由正斜杠分隔的路径,例如 URL 中的路径。此软件包不处理带有驱动器号或反斜杠的 Windows 路径;要操作操作系统路径,请使用 path/filepath 包。
https://pkg.go.dev/filepath
包文件路径实现了用于以与目标操作系统定义的文件路径兼容的方式操作文件名路径的实用程序例程。
文件路径包使用正斜杠或反斜杠,具体取决于操作系统。要处理无论操作系统如何都始终使用正斜杠的 URL 等路径,请参阅路径包。
TA贡献1830条经验 获得超3个赞
我发现path/filepath对 Windows 很有用,因为它处理斜杠或反斜杠,而path只处理斜杠:
package main
import (
"path"
"path/filepath"
)
func main() {
{ // example 1
s := filepath.Dir(`C:\go\bin`)
println(s == `C:\go`)
}
{ // example 2
s := filepath.Dir("C:/go/bin")
println(s == `C:\go`)
}
{ // example 3
s := path.Dir("C:/go/bin")
println(s == "C:/go")
}
{ // example 4
s := path.Dir(`C:\go\bin`)
println(s == ".")
}
}
- 3 回答
- 0 关注
- 386 浏览
添加回答
举报