获取用户的主目录

以下是获取正在运行的用户主目录的最佳方式吗? 还是有一个特定的function,我发了?

os.Getenv("HOME") 

如果以上是正确的,有没有人碰巧知道这种方法是否可以在非Linux平台上工作,例如Windows?

在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 ) } 

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

例如,

 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) } 

您应该在Windows下使用环境variablesUSERPROFILEHOMEPATH 。 见认可的环境variables (更多apropos文档链接将受到欢迎)。

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

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

那只是查询$ HOME环境variables。

—编辑—

我现在看到上面提出了这个相同的方法。 我将在这里将这个例子作为一个解决scheme。

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) }