Ist das Folgende der beste Weg, um das Home-Verzeichnis des laufenden Benutzers zu erhalten? Oder gibt es eine bestimmte Funktion, die ich mir angesehen habe?
os.Getenv("HOME")
Wenn das oben Gesagte zutrifft, weiß jemand zufällig, ob dieser Ansatz auf Nicht-Linux-Plattformen, z. B. Windows, garantiert funktioniert?
go
home-directory
Paul Ruane
quelle
quelle
$HOME
ist nicht unbedingt das Home-Verzeichnis des Benutzers. Zum Beispiel kann ich schreiben,export HOME=/something/else
bevor ich Ihr Programm starte. Normalerweise bedeutet dies, dass das Programm/something/else
aus irgendeinem Grund als mein Home-Verzeichnis behandelt werden soll , und normalerweise sollte das Programm dies akzeptieren. Aber wenn Sie wirklich die Benutzer benötigen tatsächliches Home - Verzeichnis, wird eine Umgebungsvariable nicht unbedingt gibt es Ihnen.Antworten:
In go 1.0.3 (wahrscheinlich auch früher) funktioniert Folgendes:
Wenn es wichtig ist, übergreifend zu kompilieren, ziehen Sie die Bibliothek in Betracht
homedir
quelle
os.UserHomeDir ()
In go1.12 + können Sie os.UserHomeDir () verwenden
Siehe https://golang.org/pkg/os/#UserHomeDir
Das sollte auch ohne CGO-fähig (dh
FROM scratch
) und ohne Parsen/etc/passwd
oder anderen solchen Unsinn funktionieren .quelle
Beispielsweise,
quelle
USERPROFILE
ist die Wurzel des Speicherplatzes des Benutzers auf dem System, aber NICHT der Ort, an den Anwendungen außerhalb einer Eingabeaufforderung zum Speichern des Dialogfelds schreiben sollten. Wenn Sie über eine Anwendungskonfiguration verfügen,APPDATA
sollte diese inLOCALAPPDATA
Windows geschrieben werden, und wenn Sie über einen Anwendungscache (oder große Dateien, die nicht über ein Netzwerk synchronisiert werden sollten) verfügen, sollte diese unter Windows beschrieben werden.Hier ist eine schöne, prägnante Möglichkeit (wenn Sie nur auf einem UNIX-basierten System arbeiten):
Das fragt nur die Umgebungsvariable $ HOME ab.
--- Bearbeiten ---
Ich sehe jetzt, dass dieselbe Methode oben vorgeschlagen wurde. Ich werde dieses Beispiel hier als destillierte Lösung belassen.
quelle
Ähnliche Antwort auf @peterSO, respektiert jedoch den
XDG_CONFIG_HOME
Pfad für Linux.quelle
APPDATA
zur Konfiguration undLOCALAPPDATA
für große Dateien. Für ein allgemeines "Zuhause" empfehle ich,LOCALAPPDATA
dass Anwendungsentwickler standardmäßig keine Unternehmensnetzwerke zerstören. 😊Sie sollten die Umgebungsvariable
USERPROFILE
oderHOMEPATH
unter Windows verwenden. Siehe Erkannte Umgebungsvariablen (ein ausführlicherer Dokumentationslink wäre zu begrüßen).quelle
HOME
, da dies wahrscheinlich bedeutet, dass Sie unter Cygwin laufen.USERPROFILE
oderHOMEPATH
unter Windows in der überwiegenden Mehrheit der Fälle. In fast allen Fällen, in denen Entwickler diese verwenden, sollten sieAPPDATA
oder verwendenLOCALAPPDATA
(je nachdem, ob es sinnvoll ist, die Inhalte beim Anmelden / Abmelden über das Netzwerk zu synchronisieren).go1.8rc2 hat die Funktion go / build / defaultGOPATH, die das Home-Verzeichnis abruft. https://github.com/golang/go/blob/go1.8rc2/src/go/build/build.go#L260-L277
Der folgende Code wird aus der defaultGOPATH-Funktion extrahiert.
quelle
APPDATA
oderLOCALAPPDATA
ist fast immer die richtige Wahl, nichtUSERPROFILE
unter Windows.