Ce face os.RemoveAll
os.RemoveAll este echivalentul comenzii rm -rf: șterge directorul împreună cu toate fișierele și subdirectoarele lui. Dacă calea nu există, returnează nil.
Funcția este periculoasă dacă calea vine din date nesigure sau e calculată greșit. Verifică întotdeauna calea înainte (să nu fie goală, să nu fie / sau directorul utilizatorului).
Parametri
| Parametru | Descriere |
|---|---|
path |
Calea fișierului sau directorului de șters. |
Ce returnează
nil dacă la final calea nu mai există, altfel prima eroare întâlnită.
Exemple
Exemplul 1: Ștergerea unui director întreg
package main
import (
"fmt"
"os"
)
func main() {
os.MkdirAll("build/js/vendor", 0o755)
os.WriteFile("build/index.html", []byte("<h1>Salut</h1>"), 0o644)
os.WriteFile("build/js/app.js", []byte("console.log(1)"), 0o644)
fmt.Println("RemoveAll:", os.RemoveAll("build"))
_, err := os.Stat("build")
fmt.Println("build există?", err == nil)
}
Rezultat
RemoveAll: <nil>
build există? false
Exemplul 2: Calea nu există: nicio eroare
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.RemoveAll("nu-exista"))
}
Rezultat
<nil>
Exemplul 3: Protecție înainte de ștergere
O funcție mică de siguranță refuză căile goale sau absolute înainte de RemoveAll.
package main
import (
"errors"
"fmt"
"os"
"path/filepath"
)
func curataDirector(cale string) error {
if cale == "" || filepath.IsAbs(cale) || !filepath.IsLocal(cale) {
return errors.New("cale refuzată: " + cale)
}
return os.RemoveAll(cale)
}
func main() {
os.MkdirAll("temp/imagini", 0o755)
fmt.Println(curataDirector("temp"))
fmt.Println(curataDirector(""))
fmt.Println(curataDirector("/"))
fmt.Println(curataDirector("../alt-proiect"))
}
Rezultat
<nil>
cale refuzată:
cale refuzată: /
cale refuzată: ../alt-proiect
Greșeli frecvente
- Construiești calea din variabile care pot fi goale:
os.RemoveAll(baza + "/" + nume)cubazagol devine/nume. Verifică datele înainte. - Te bazezi pe eroare ca să afli dacă directorul exista.
RemoveAllreturneazănilși când nu exista nimic.
Comenzi înrudite
os.Remove: Șterge un fișier sau un director gol.os.MkdirTemp: Creează un director temporar nou, cu nume unic, și returnează calea lui.filepath.IsLocal: Spune dacă o cale rămâne în interiorul directorului curent: nu e absolută, nu e goală și nu urcă cu „..”.os.MkdirAll: Creează un director împreună cu toți părinții care lipsesc; nu dă eroare dacă directorul există deja.