【发布时间】:2017-01-04 00:58:57
【问题描述】:
我发现包path和包path/filepath中有很多类似的功能。我尝试了几种常见的路径,例如/var/log/something,但没有发现任何差异。什么时候应该直接使用path,什么时候应该使用filepath?
【问题讨论】:
我发现包path和包path/filepath中有很多类似的功能。我尝试了几种常见的路径,例如/var/log/something,但没有发现任何差异。什么时候应该直接使用path,什么时候应该使用filepath?
【问题讨论】:
我发现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 == ".")
}
}
【讨论】:
虽然功能相似,但 path 和 path/filepath 提供不同的实现。在处理路径字符串时,文件路径依赖于os 包来选择目标运行时的文件分隔符和其他不同的组件。
您可以查看os source,以了解各种实用功能的不同实现。这允许库抽象出操作系统特定的细节,并有助于实现可移植性。 path/filepath dependency graph 说明了包如何依赖于 os 包。您可以将其与 路径 dependency graph 进行比较。我鼓励您进入filepath 和path 源代码来观察这种关系。
在处理文件时,您应该使用 filepath。这确保您的路径将与实际文件匹配,而不管底层运行时如何。 path 库应在模型中使用,或者在路径可能被序列化或与其他程序通信时使用。这确保了无论程序运行在什么平台上,都使用单一的格式化方案。采用一致的格式可以使模型推理更通用且更易于理解。
【讨论】: