La méthode suivante est-elle la meilleure façon d'obtenir le répertoire personnel de l'utilisateur en cours d'exécution? Ou y a-t-il une fonction spécifique que j'ai exagérée?
os.Getenv("HOME")
Si ce qui précède est correct, est-ce que quelqu'un sait si cette approche est garantie de fonctionner sur des plates-formes non Linux, par exemple Windows?
go
home-directory
Paul Ruane
la source
la source
$HOME
n'est pas nécessairement le répertoire personnel de l'utilisateur. Par exemple, je peux écrireexport HOME=/something/else
avant de lancer votre programme. Habituellement, cela signifie que je veux que le programme le traite/something/else
comme mon répertoire personnel pour une raison quelconque, et généralement le programme devrait l'accepter. Mais si vous avez vraiment besoin du répertoire personnel réel de l'utilisateur , une variable d'environnement ne vous le donnera pas nécessairement.Réponses:
Dans go 1.0.3 (probablement plus tôt aussi), les travaux suivants:
S'il est important d'effectuer une compilation croisée, considérez la
homedir
bibliothèquela source
os.UserHomeDir ()
Dans go1.12 +, vous pouvez utiliser 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 autre absurdité.la source
Par exemple,
la source
USERPROFILE
est la racine de l'espace de stockage de l'utilisateur sur le système, mais ce n'est PAS l'endroit où les applications doivent écrire en dehors d'une invite de dialogue d'enregistrement. Si vous avez une configuration d'application, elle doit être écriteAPPDATA
et si vous avez un cache d'application (ou des fichiers volumineux qui ne doivent pas se synchroniser sur un réseau), elle doit être écriteLOCALAPPDATA
sous Windows.Voici une manière agréable et concise de le faire (si vous utilisez uniquement un système UNIX):
Cela interroge simplement la variable d'environnement $ HOME.
--- Éditer ---
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.
la source
Réponse similaire à @peterSO mais respecte le
XDG_CONFIG_HOME
chemin pour linux.la source
APPDATA
pour la configuration etLOCALAPPDATA
pour les gros fichiers. Pour une «maison» à usage général, je recommandeLOCALAPPDATA
donc par défaut aux développeurs d'applications de ne pas détruire les réseaux d'entreprise. 😊Vous devez utiliser la variable d'environnement
USERPROFILE
ouHOMEPATH
sous Windows. Voir Variables d'environnement reconnues (un lien de documentation plus à propos serait le bienvenu).la source
HOME
, car cela signifie probablement que vous utilisez cygwin.USERPROFILE
ouHOMEPATH
sous Windows dans la grande majorité des cas. Dans presque tous les cas où les développeurs les utilisent, ce qu'ils devraient utiliser estAPPDATA
ouLOCALAPPDATA
(selon qu'il est raisonnable que le contenu se synchronise sur le réseau lors de la connexion / déconnexion).go1.8rc2 a la fonction go / build / defaultGOPATH qui récupère 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.
la source
APPDATA
ouLOCALAPPDATA
est presque toujours le bon choix, pasUSERPROFILE
, sous Windows.