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.