Sjekke om en mappe eksisterer

Go:
Sjekke om en mappe eksisterer

Hvordan:

I Go, gir os-pakken funksjonaliteter for å samhandle med operativsystemet, inkludert å sjekke om en katalog eksisterer. Her er hvordan du kan gjøre det:

package main

import (
    "fmt"
    "os"
)

// isDirExists sjekker om en katalog eksisterer
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("Directory %s exists.\n", dirPath)
    } else {
        fmt.Printf("Directory %s does not exist.\n", dirPath)
    }
}

Eksempelutskrift:

Directory /tmp/exampleDir exists.

eller

Directory /tmp/exampleDir does not exist.

Avhengig av om /tmp/exampleDir eksisterer.

Dypdykk

Funksjonen os.Stat returnerer et FileInfo-grensesnitt og en feil. Hvis feilen er av typen os.ErrNotExist, betyr det at katalogen ikke eksisterer. Hvis det ikke er noen feil, sjekker vi videre om stien faktisk refererer til en katalog gjennom IsDir()-metoden fra FileInfo-grensesnittet.

Denne metoden skiller seg ut på grunn av sin enkelhet og effektivitet, men det er viktig å merke seg at det å sjekke for eksistensen av en katalog før man utfører operasjoner som å opprette eller skrive, kan føre til race conditions i parallelt arbeidende miljøer. For mange scenarioer, spesielt i applikasjoner som kjører parallelt, kan det være tryggere å forsøke operasjonen (f.eks. filoppretting) og håndtere feil etter faktum, i stedet for å sjekke først.

Historisk sett har denne tilnærmingen vært vanlig i programmering på grunn av sin enkle logikk. Imidlertid nødvendiggjør utviklingen av multi-trådede og parallelle databehandlinger en overgang mot mer robust feilhåndtering og å unngå forhåndssjekker som dette der det er mulig. Dette reduserer ikke dens nytte for enklere, single-trådede applikasjoner eller skript hvor slike forhold er mindre av en bekymring.