Les éléments suivants constituent-ils le meilleur moyen d'obtenir le répertoire de base de l'utilisateur en cours d'exécution? Ou y a-t-il une fonction spécifique que j'ai trop recherchée?
os.Getenv("HOME")
Si ce qui précède est correct, quelqu'un sait-il si cette approche est garantie de fonctionner sur des plates-formes non Linux, par exemple Les fenêtres?
Dans go 1.0.3 (probablement plus tôt aussi), les travaux suivants:
package main
import (
"os/user"
"fmt"
"log"
)
func main() {
usr, err := user.Current()
if err != nil {
log.Fatal( err )
}
fmt.Println( usr.HomeDir )
}
S'il est important d'effectuer une compilation croisée, considérez la bibliothèque homedir
Par exemple,
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)
}
Dans go1.12 +, vous pouvez utiliser os.UserHomeDir ()
home, err := os.UserHomeDir()
Voir https://golang.org/pkg/os/#UserHomeDir
Cela devrait fonctionner même sans CGO activé (c'est-à-dire FROM scratch
) et sans avoir à analyser /etc/passwd
ou tout autre non-sens.
Voici une manière agréable et concise de le faire (si vous ne travaillez que sur un système UNIX):
import (
"os"
)
var home string = os.Getenv("HOME")
Cela interroge simplement la variable d'environnement $ HOME.
--- Modifier ---
Je vois maintenant que cette même méthode a été suggérée ci-dessus. Je vais laisser cet exemple ici comme une solution distillée.
Réponse similaire à @peterSO mais respecte le XDG_CONFIG_HOME
chemin pour linux.
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())
}
go1.8rc2 a la fonction go/build/defaultGOPATH qui obtient le répertoire personnel. https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277
Le code suivant est extrait de la fonction 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)
}
Vous devez utiliser la variable d'environnement USERPROFILE
ou HOMEPATH
sous Windows. Voir Variables d'environnement reconnues (un lien de documentation plus approprié serait le bienvenu).