Получить домашний каталог пользователя
Является ли лучший способ получения работающего домашнего каталога пользователя? Или есть определенная функция, которую я изучил?
os.Getenv("HOME")
Если вышесказанное верно, может ли кто-нибудь узнать, гарантирован ли этот подход для работы на платформах, отличных от Linux? Windows?
Ответы
Ответ 1
В go 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
Ответ 2
Например,
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)
}
Ответ 3
Вы должны использовать переменную окружения USERPROFILE
или HOMEPATH
под Windows. См. Распознаваемые переменные среды (более приветствуется ссылка на документацию).
Ответ 4
Здесь хороший, сжатый способ сделать это (если вы работаете только в системе на базе UNIX):
import (
"os"
)
var home string = os.Getenv("HOME")
Это просто запрашивает переменную среды $HOME.
--- Редактировать ---
Теперь я вижу, что этот же метод был предложен выше. Я оставлю этот пример здесь как дистиллированное решение.
Ответ 5
go1.8rc2 имеет функцию go/build/defaultGOPATH, которая получает домашний каталог.
https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277
Следующий код извлекается из функцииGOPATH по умолчанию.
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)
}