Verificare se una directory esiste

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.