src/os: Add UserHomeDir() function to os package
This commit adds the `UserHomeDir()` function to the `os` package.
Этот коммит содержится в:
родитель
6f31712b7d
коммит
6fb90b6fc4
2 изменённых файлов: 45 добавлений и 0 удалений
|
@ -12,6 +12,7 @@ package os
|
|||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"runtime"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
|
@ -259,3 +260,29 @@ func Getwd() (string, error) {
|
|||
func TempDir() string {
|
||||
return tempDir()
|
||||
}
|
||||
|
||||
// UserHomeDir returns the current user's home directory.
|
||||
//
|
||||
// On Unix, including macOS, it returns the $HOME environment variable.
|
||||
// On Windows, it returns %USERPROFILE%.
|
||||
// On Plan 9, it returns the $home environment variable.
|
||||
func UserHomeDir() (string, error) {
|
||||
env, enverr := "HOME", "$HOME"
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
env, enverr = "USERPROFILE", "%userprofile%"
|
||||
case "plan9":
|
||||
env, enverr = "home", "$home"
|
||||
}
|
||||
if v := Getenv(env); v != "" {
|
||||
return v, nil
|
||||
}
|
||||
// On some geese the home directory is not always defined.
|
||||
switch runtime.GOOS {
|
||||
case "android":
|
||||
return "/sdcard", nil
|
||||
case "ios":
|
||||
return "/", nil
|
||||
}
|
||||
return "", errors.New(enverr + " is not defined")
|
||||
}
|
||||
|
|
|
@ -253,3 +253,21 @@ func TestRenameFailed(t *testing.T) {
|
|||
t.Errorf("rename %q, %q: expected %T, got %T %v", from, to, new(LinkError), err, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestUserHomeDir(t *testing.T) {
|
||||
dir, err := UserHomeDir()
|
||||
if dir == "" && err == nil {
|
||||
t.Fatal("UserHomeDir returned an empty string but no error")
|
||||
}
|
||||
if err != nil {
|
||||
t.Logf("UserHomeDir failed: %v", err)
|
||||
return
|
||||
}
|
||||
fi, err := Stat(dir)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if !fi.IsDir() {
|
||||
t.Fatalf("dir %s is not directory; type = %v", dir, fi.Mode())
|
||||
}
|
||||
}
|
||||
|
|
Загрузка…
Создание таблицы
Сослаться в новой задаче