Voglio aprire un file dato "directory/subdirectory/file.txt"
in golang. Qual è il modo consigliato per esprimere un tale percorso in modo agnostico sul sistema operativo (ad es. Backslash in Windows, barre rovesciate in Mac e Linux)? Qualcosa come il modulo os.path
di Python?Come si creano percorsi di file crossplatform in Go?
risposta
Per creare e modificare i percorsi specifici del sistema operativo utilizzare direttamente os.PathSeparator
e il pacchetto path/filepath
.
Un metodo alternativo è quello di utilizzare sempre '/'
e il pacchetto path
in tutto il programma. Il pacchetto path
utilizza '/'
come separatore di percorso indipendentemente dal sistema operativo. Prima di aprire o creare un file, convertire il percorso/-separato in una stringa di percorso specifica del sistema operativo chiamando filepath.FromSlash(path string)
. I percorsi restituiti dal sistema operativo possono essere convertiti in/percorsi separati chiamando lo filepath.ToSlash(path string)
.
Go dispone del pacchetto path
per l'unione e la suddivisione dei percorsi dei file, ma non è necessario utilizzarlo. Vai considera le barre in avanti come separatore universale. "directory/subdirectory/file.txt"
verrà aperto correttamente indipendentemente dal sistema operativo runtime.
Utilizzare path/filepath
anziché path
. path
è destinato solo ai percorsi separati dalla barra (come quelli utilizzati negli URL), mentre path/filepath
gestisce i percorsi tra diversi sistemi operativi.
Deve essere contrassegnato come risposta giusta, molto più facile da capire - basta usare filepath ovunque e ... profitto! – QtRoS
Hai provato su Windows? –
@Atom Non possiedo una macchina Windows. [Russ Cox dice Go tratta/"come separatore di percorso su tutte le piattaforme] (http://groups.google.com/group/golang-nuts/browse_thread/thread/5527660c2d860ca3), che mi sembra abbastanza buono. – Jjed
Russ ha rilasciato questo commento il 2010-01-09. Da allora sono state apportate alcune modifiche alla gestione dei percorsi: vedi http://golang.org/doc/devel/weekly.html#2011-03-07 –