1

是否可以跨平台获取 Go 中系统文件夹的路径?例如。临时文件夹、“文档”文件夹等。

我发现ioutil.TempFolder/File但他们做了一些不同的事情。任何想法?

4

5 回答 5

2

内置选项尚不存在。最好的办法是打开一个问题并提交一个功能请求。

同时,您可以使用特定于平台的 +build flags自己添加支持。有了这个,你有几个选择:

  1. 使用os 包获取每个系统的信息,可能通过 shell。
  2. cgo与现有的 C / C++ 方法一起使用。请参阅此答案,其中解释了如何使用 C++ for Windows 获取此信息。

os阅读包的源代码以了解如何获取特定于平台的信息也可能会有所帮助。这可以帮助您设计一种获取此信息的方法,并可能提交要包含的补丁。

于 2013-08-05T05:47:27.060 回答
2

目前无法以跨平台方式访问标准系统文件夹。虽然可以使用用户包访问主目录:

u, _ := user.Current()
fmt.Println(u.HomeDir)
于 2013-08-18T05:41:11.143 回答
2

在 2020 年,我试图获得类似的东西,但仅限于临时目录跨平台。当我找到这个线程并阅读了一些答案时,我几乎得出了不可能的结论。

但是经过一些进一步的研究,我发现 go 已经有了它。就像接受的答案所指出的那样,它位于os包装内。基于此文档:https ://golang.org/pkg/os/#TempDir ,我们可以通过调用:TempDir()函数来获取它。

如果有人试图查看另一个操作系统系统目录路径,并在此线程中偶然发现,我的建议是,请尝试进行一些进一步的研究。看起来目前 go 在 OS 系统目录方面具有更完整的功能。

于 2020-06-03T07:31:19.200 回答
1

除了 Luke 提到的方法之外,在 Windows 上,您还可以从environment variables获取一些路径。在某种程度上,同样适用于 Unix($HOME 等)。

于 2013-08-05T08:53:40.270 回答
0

对于操作系统的临时目录,如 Bayu 所述,有一个内置函数os.TempDir() string可以获取特定于操作系统的临时目录:

// TempDir returns the default directory to use for temporary files.
//
// On Unix systems, it returns $TMPDIR if non-empty, else /tmp.
// On Windows, it uses GetTempPath, returning the first non-empty
// value from %TMP%, %TEMP%, %USERPROFILE%, or the Windows directory.
// On Plan 9, it returns /tmp.
//
// The directory is neither guaranteed to exist nor have accessible
// permissions.
func TempDir() string {
    return tempDir()
}

ioutil.TempDir(dir, pattern string) (string, error)如果您为参数提供空字符串,则该函数实际使用它dir。查看第 5 行和第 6 行:

// TempDir creates a new temporary directory in the directory dir.
// The directory name is generated by taking pattern and applying a
// random string to the end. If pattern includes a "*", the random string
// replaces the last "*". TempDir returns the name of the new directory.
// If dir is the empty string, TempDir uses the
// default directory for temporary files (see os.TempDir).
// Multiple programs calling TempDir simultaneously
// will not choose the same directory. It is the caller's responsibility
// to remove the directory when no longer needed.
func TempDir(dir, pattern string) (name string, err error) {
于 2021-06-28T20:30:05.063 回答