Kontrollera om en katalog existerar

Go:
Kontrollera om en katalog existerar

Hur man gör:

I Go tillhandahåller paketet os funktionaliteter för att interagera med operativsystemet, inklusive att kontrollera om en katalog finns. Så här kan du göra det:

package main

import (
    "fmt"
    "os"
)

// isDirExists kontrollerar om en katalog finns
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("Katalog %s finns.\n", dirPath)
    } else {
        fmt.Printf("Katalog %s finns inte.\n", dirPath)
    }
}

Exempelutdata:

Katalog /tmp/exampleDir finns.

eller

Katalog /tmp/exampleDir finns inte.

Beroende på om /tmp/exampleDir finns.

Djupdykning

Funktionen os.Stat returnerar ett FileInfo-gränssnitt och ett fel. Om felet är av typen os.ErrNotExist, betyder det att katalogen inte finns. Om det inte finns något fel, kontrollerar vi vidare om vägen verkligen refererar till en katalog genom metodet IsDir() från FileInfo-gränssnittet.

Denna metod utmärker sig på grund av sin enkelhet och effektivitet, men det är viktigt att notera att att kontrollera en katalogs existens innan man gör operationer som att skapa eller skriva kan leda till tillståndstävlingar i samtidiga miljöer. För många scenarier, speciellt i samtidiga applikationer, kan det vara säkrare att försöka med operationen (t.ex. filskapande) och hantera fel efteråt, snarare än att kontrollera först.

Historiskt sett har denna ansats varit vanlig inom programmering på grund av dess raka logik. Men, utvecklingen av flertrådad och samtidig databehandling kräver en förskjutning mot mer robust felhantering och att undvika förhandskontroller som denna där det är möjligt. Detta minskar inte dess nytta för enklare, enkeltrådade applikationer eller skript där sådana förhållanden är mindre av en oro.