【问题标题】:What's the difference between path & path.filepath packages in GoGo 中的 path 和 path.filepath 包有什么区别
【发布时间】:2017-01-04 00:58:57
【问题描述】:

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

【问题讨论】:

    标签: go path filepath


    【解决方案1】:

    我发现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 == ".")
       }
    }
    

    【讨论】:

      【解决方案2】:

      有什么区别?

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

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

      我什么时候使用它们?

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

      【讨论】:

      • 这是一个比文件路径建议的更棘手的话题。 Posix / 分隔符是该方案中的一个特殊字符,但通常在不同的操作系统上可能不是这样。这不是一个完全通用的解决方案,因为段中允许的字符集在操作系统之间是不同的,从而导致棘手的边缘情况。此外,Windows 也接受 /(即它具有 posix 合规性)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-30
      • 2018-11-07
      • 2013-12-25
      • 1970-01-01
      • 2020-09-19
      • 2018-01-02
      相关资源
      最近更新 更多