路径和路径之间的区别是什么? Go中的path.filepath包

时间:2016-08-27 13:41:41

标签: go path filepath

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

2 个答案:

答案 0 :(得分:23)

有什么区别?

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

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

我何时才使用它们?

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

答案 1 :(得分:0)

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