为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
Qyouu 2022-03-07 14:43:49
我发现包路径和包路径/文件路径中有很多类似的功能。我尝试了几种常见的路径,/var/log/something但没有发现任何差异。什么时候应该path直接使用,什么时候应该使用filepath?
查看完整描述

3 回答

?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

有什么区别?

虽然功能相似,但path和path/filepath提供不同的实现。Filepath在处理路径字符串时依赖于os包来选择目标运行时的文件分隔符和其他不同的组件。


您可以查看os 源代码,以了解各种实用功能的不同实现。这允许库抽象出操作系统特定的细节,并有助于实现可移植性。路径/文件路径 依赖图说明了包如何依赖于os包。您可以将此与路径 依赖图进行比较。我鼓励你进入文件路径和路径源代码来观察这种关系。


我什么时候使用每个?

处理文件时应该使用文件路径。这确保您的路径将与实际文件匹配,而不管底层运行时如何。路径库应该在模型中或者路径可以被序列化或与其他程序通信时使用。这确保了无论程序运行在什么平台上,都使用单一的格式化方案。具有一致的格式使得对模型的推理更加通用且更易于理解。


查看完整回答
反对 回复 2022-03-07
?
米脂

TA贡献1836条经验 获得超3个赞

https://pkg.go.dev/path

包路径实现了用于操作斜杠分隔路径的实用程序。

path 包只能用于由正斜杠分隔的路径,例如 URL 中的路径。此软件包不处理带有驱动器号或反斜杠的 Windows 路径;要操作操作系统路径,请使用 path/filepath 包。

https://pkg.go.dev/filepath

包文件路径实现了用于以与目标操作系统定义的文件路径兼容的方式操作文件名路径的实用程序例程。

文件路径包使用正斜杠或反斜杠,具体取决于操作系统。要处理无论操作系统如何都始终使用正斜杠的 URL 等路径,请参阅路径包。


查看完整回答
反对 回复 2022-03-07
?
牛魔王的故事

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 == ".")

   }

}


查看完整回答
反对 回复 2022-03-07
  • 3 回答
  • 0 关注
  • 386 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信