Go 中的 path 和 path.filepath 包有什么区别

我发现包路径和包路径/文件路径中有很多类似的功能。我尝试了几种常见的路径,/var/log/something但没有发现任何差异。什么时候应该path直接使用,什么时候应该使用filepath


Qyouu
浏览 387回答 3
3回答

阿波罗的战车

有什么区别?虽然功能相似,但path和path/filepath提供不同的实现。Filepath在处理路径字符串时依赖于os包来选择目标运行时的文件分隔符和其他不同的组件。您可以查看os 源代码,以了解各种实用功能的不同实现。这允许库抽象出操作系统特定的细节,并有助于实现可移植性。路径/文件路径 依赖图说明了包如何依赖于os包。您可以将此与路径 依赖图进行比较。我鼓励你进入文件路径和路径源代码来观察这种关系。我什么时候使用每个?处理文件时应该使用文件路径。这确保您的路径将与实际文件匹配,而不管底层运行时如何。路径库应该在模型中或者路径可以被序列化或与其他程序通信时使用。这确保了无论程序运行在什么平台上,都使用单一的格式化方案。具有一致的格式使得对模型的推理更加通用且更易于理解。

米脂

https://pkg.go.dev/path包路径实现了用于操作斜杠分隔路径的实用程序。path 包只能用于由正斜杠分隔的路径,例如 URL 中的路径。此软件包不处理带有驱动器号或反斜杠的 Windows 路径;要操作操作系统路径,请使用 path/filepath 包。https://pkg.go.dev/filepath包文件路径实现了用于以与目标操作系统定义的文件路径兼容的方式操作文件名路径的实用程序例程。文件路径包使用正斜杠或反斜杠,具体取决于操作系统。要处理无论操作系统如何都始终使用正斜杠的 URL 等路径,请参阅路径包。

牛魔王的故事

我发现path/filepath对 Windows 很有用,因为它处理斜杠或反斜杠,而path只处理斜杠:package mainimport (   "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 == ".")   }}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go