获取用户的主目录
以下是获取正在运行的用户主目录的最佳方式吗? 还是有一个特定的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下使用环境variablesUSERPROFILE
或HOMEPATH
。 见认可的环境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) }