获取用户的主目录

时间:2011-10-27 20:54:36

标签: go home-directory

以下是获取正在运行的用户主目录的最佳方法吗?或者我有一个特定的功能吗?

os.Getenv("HOME")

如果上述情况正确,是否有人碰巧知道这种方法是否可以保证在非Linux平台上运行,例如视窗?

7 个答案:

答案 0 :(得分:151)

在1.0.3版本中(可能更早),以下工作:

package main
import (
    "os/user"
    "fmt"
    "log"
)
func main() {
    usr, err := user.Current()
    if err != nil {
        log.Fatal( err )
    }
    fmt.Println( usr.HomeDir )
}

如果交叉编译很重要,请考虑the homedir library

答案 1 :(得分:19)

例如,

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    }
    return os.Getenv("HOME")
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}

答案 2 :(得分:6)

os.UserHomeDir()

在go1.12 +中,您可以使用os.UserHomeDir()

home, err := os.UserHomeDir()

请参见https://golang.org/pkg/os/#UserHomeDir

即使在未启用CGO(即FROM scratch)并且无需解析/etc/passwd或其他此类废话的情况下,这也应能工作。

答案 3 :(得分:4)

这是一个很好的,简洁的方法(如果你只在基于UNIX的系统上运行):

import (
  "os"
)

var home string = os.Getenv("HOME")

只查询$ HOME环境变量。

---编辑---

我现在看到上面提出了同样的方法。我将这个例子作为一种蒸馏溶液留在这里。

答案 4 :(得分:2)

您应该在Windows下使用环境变量USERPROFILEHOMEPATH。请参阅Recognized Environment Variables(欢迎更多apropos文档链接。)

答案 5 :(得分:2)

go1.8rc2有go / build / defaultGOPATH函数,它获取主目录。 https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277

以下代码是从defaultGOPATH函数中提取的。

package main

import (
    "fmt"
    "os"
    "runtime"
)

func UserHomeDir() string {
    env := "HOME"
    if runtime.GOOS == "windows" {
        env = "USERPROFILE"
    } else if runtime.GOOS == "plan9" {
        env = "home"
    }
    return os.Getenv(env)
}

func main() {
    dir := UserHomeDir()
    fmt.Println(dir)
}

答案 6 :(得分:1)

@peterSO的类似答案,但遵循Linux的XDG_CONFIG_HOME路径。

package main

import (
    "fmt"
    "os"
    "runtime"
)

func userHomeDir() string {
    if runtime.GOOS == "windows" {
        home := os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH")
        if home == "" {
            home = os.Getenv("USERPROFILE")
        }
        return home
    } else if runtime.GOOS == "linux" {
        home := os.Getenv("XDG_CONFIG_HOME")
        if home != "" {
            return home
        }
    }
    return os.Getenv("HOME")
}

func main() {
    fmt.Println(userHomeDir())
}