如何在Go语言中创建跨平台的文件路径?

92

我希望在Golang中打开给定的文件"directory/subdirectory/file.txt"。如何以OS无关的方式表示此类路径(例如,在Windows中使用反斜杠,在Mac和Linux中使用正斜杠)?类似于Python的os.path模块?

4个回答

86

要直接创建和操作特定操作系统的路径,可以使用 os.PathSeparatorpath/filepath 包。

另一种方法是在程序中始终使用 '/'path 包。无论操作系统如何,path 包都将 '/' 作为路径分隔符。在打开或创建文件之前,通过调用 filepath.FromSlash(path string) 将 / 分隔的路径转换为特定操作系统的路径字符串。通过调用 filepath.ToSlash(path string) 可以将操作系统返回的路径转换为 / 分隔的路径。


50

使用path/filepath代替pathpath仅适用于以前向斜杠分隔的路径(例如在URL中使用的路径),而path/filepath可跨不同操作系统操作路径。

示例:

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    path := filepath.Join("home", "hello", "world.txt")
    fmt.Println(path)
}

Go Playground: https://go.dev/play/p/2Fpb_vJzvSb


4
必须将答案标记为正确答案,只需在各个地方使用文件路径,就能轻松实现并获得利益! - QtRoS
你能添加一个例子吗? - 030

24

根据 @EvanShaw 的回答和 这篇博客,创建了以下代码:

package main

import (
    "fmt"
    "os"
    "path/filepath"
)

func main() {
    p := filepath.FromSlash("path/to/file")
    fmt.Println("Path: " + p)
}

返回:

Path: path\to\file

在Windows上。


-5

Go语言将正斜杠(/)作为所有平台的通用分隔符[1]。无论运行操作系统如何,"directory/subdirectory/file.txt"都可以正确地打开。


1
@Atom 我没有Windows机器。Russ Cox说Go在所有平台上都将'/'作为路径分隔符,这对我来说已经足够好了。 - Jjed
2
Russ在2010年1月9日发表了那个评论。自那以后,路径处理方面已经发生了一些变化:请参阅http://golang.org/doc/devel/weekly.html#2011-03-07。 - user811773
5
为了更加明确,这个答案已经不再正确。现在,path/filepath始终是这个问题的正确答案。 - Flowchartsman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接