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

什么';这是路径和路径之间的区别;Go中的path.filepath包,go,path,filepath,Go,Path,Filepath,我发现包和包中有很多类似的功能。我尝试了几种常见的路径,如/var/log/something,但没有发现任何差异。什么时候应该直接使用路径,什么时候应该使用文件路径? 虽然功能相似,和提供了不同的实现。处理路径字符串时,Filepath取决于选择目标运行时的文件分隔符和其他不同组件的包 您可以从中看到各种实用程序函数有不同的实现。这允许库抽象出特定于操作系统的细节,并有助于实现可移植性。path/filepath说明了包如何依赖于os包。您可以将其与路径进行比较。我鼓励您深入研究和源代码以观察

我发现包和包中有很多类似的功能。我尝试了几种常见的路径,如
/var/log/something
,但没有发现任何差异。什么时候应该直接使用
路径
,什么时候应该使用
文件路径
? 虽然功能相似,提供了不同的实现。处理路径字符串时,Filepath取决于选择目标运行时的文件分隔符和其他不同组件的包

您可以从中看到各种实用程序函数有不同的实现。这允许库抽象出特定于操作系统的细节,并有助于实现可移植性。path/filepath说明了包如何依赖于os包。您可以将其与路径进行比较。我鼓励您深入研究和源代码以观察这种关系

我什么时候用?
处理文件时,应使用文件路径。这确保了无论底层运行时如何,您的路径都将与实际文件匹配。路径库应在模型内使用,或者当路径可以序列化或与其他程序通信时使用。这确保了无论在哪个平台上运行编程,都使用单个格式化方案。使用一致的格式可以使模型的推理更通用、更容易理解。

我发现
path/filepath
对Windows很有用,因为它可以处理斜杠或反斜杠, 而路径只处理斜杠:

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

这是一个比filepath建议的更棘手的主题。Posix/分隔符在该方案中是一个特殊字符,但通常在不同的操作系统上可能不是这样。这不是一个完全通用的解决方案,因为段中允许的字符集在操作系统之间是不同的,这会导致棘手的边缘情况。此外,Windows也接受/也接受(即,它符合posix)。