Controleren of een directory bestaat

Go:
Controleren of een directory bestaat

Hoe te:

In Go biedt het os-pakket functionaliteiten voor interactie met het besturingssysteem, inclusief het controleren of een map bestaat. Hier is hoe je het kunt doen:

package main

import (
    "fmt"
    "os"
)

// isDirExists controleert of een map bestaat
func isDirExists(path string) bool {
    info, err := os.Stat(path)
    als os.IsNotExist(err) {
        return false
    }
    return info.IsDir()
}

func main() {
    dirPath := "/tmp/exampleDir"

    if isDirExists(dirPath) {
        fmt.Printf("Map %s bestaat.\n", dirPath)
    } else {
        fmt.Printf("Map %s bestaat niet.\n", dirPath)
    }
}

Voorbeelduitvoer:

Map /tmp/exampleDir bestaat.

of

Map /tmp/exampleDir bestaat niet.

Afhankelijk van of /tmp/exampleDir bestaat.

Diepere duik

De functie os.Stat retourneert een FileInfo-interface en een fout. Als de fout van het type os.ErrNotExist is, betekent dit dat de map niet bestaat. Als er geen fout is, controleren we verder of het pad inderdaad naar een map verwijst via de methode IsDir() van de FileInfo-interface.

Deze methode valt op door zijn eenvoud en effectiviteit, maar het is belangrijk op te merken dat het controleren op het bestaan van een map vóór bewerkingen zoals creëren of schrijven tot racecondities kan leiden in gelijktijdige omgevingen. Voor veel scenario’s, vooral in gelijktijdige applicaties, kan het veiliger zijn om de operatie (bijv. bestandscreatie) te proberen en fouten achteraf af te handelen, in plaats van eerst te controleren.

Historisch gezien was deze aanpak gebruikelijk in programmeren vanwege zijn duidelijke logica. Echter, de evolutie van multi-threaded en gelijktijdige computing noodzaakt een verschuiving naar robuustere foutafhandeling en het vermijden van voorwaardelijke controles zoals deze waar mogelijk. Dit vermindert niet zijn nut voor eenvoudigere, single-threaded applicaties of scripts waar dergelijke omstandigheden minder een zorg zijn.