Go:
Verificare se una directory esiste
Come fare:
In Go, il pacchetto os
fornisce funzionalità per interagire con il sistema operativo, incluso il controllo dell’esistenza di una directory. Ecco come si può fare:
package main
import (
"fmt"
"os"
)
// isDirExists verifica se una directory esiste
func isDirExists(path string) bool {
info, err := os.Stat(path)
if os.IsNotExist(err) {
return false
}
return info.IsDir()
}
func main() {
dirPath := "/tmp/exampleDir"
if isDirExists(dirPath) {
fmt.Printf("La directory %s esiste.\n", dirPath)
} else {
fmt.Printf("La directory %s non esiste.\n", dirPath)
}
}
Esempio di output:
La directory /tmp/exampleDir esiste.
o
La directory /tmp/exampleDir non esiste.
A seconda che /tmp/exampleDir
esista.
Approfondimento
La funzione os.Stat
restituisce un’interfaccia FileInfo
e un errore. Se l’errore è del tipo os.ErrNotExist
, significa che la directory non esiste. Se non c’è errore, controlliamo ulteriormente se il percorso fa effettivamente riferimento a una directory attraverso il metodo IsDir()
dell’interfaccia FileInfo
.
Questo metodo spicca per la sua semplicità ed efficacia, ma è importante notare che il controllo dell’esistenza di una directory prima di effettuare operazioni come la creazione o la scrittura potrebbe portare a condizioni di gara in ambienti concorrenti. Per molti scenari, specialmente nelle applicazioni concorrenti, potrebbe essere più sicuro tentare l’operazione (ad esempio, la creazione di file) e gestire gli errori successivamente, piuttosto che controllare prima.
Storicamente, questo approccio è stato comune nella programmazione a causa della sua logica diretta. Tuttavia, l’evoluzione del calcolo multithreading e concorrente necessita di un cambio verso una gestione degli errori più robusta ed evitando controlli di precondizione come questo dove possibile. Questo non ne diminuisce l’utilità per applicazioni o script più semplici, monofilamento, dove tali condizioni sono meno preoccupanti.