Функция os.MkdirAll
Функция os.MkdirAll создает каталог с указанным именем
и всеми необходимыми родительскими каталогами. Она принимает
два параметра: путь в виде строки и права доступа в виде
fs.FileMode. Возвращает ошибку, если операция не удалась.
Если конечный каталог уже существует, функция вернет nil
(при условии, что путь существует и является директорией).
Синтаксис
err := os.MkdirAll(path string, perm fs.FileMode)
Пример
Создадим вложенную структуру каталогов:
package main
import (
"fmt"
"os"
)
func main() {
path := "a/b/c/d"
perm := 0755
err := os.MkdirAll(path, os.FileMode(perm))
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Directories created:", path)
}
Результат выполнения кода:
"Directories created: a/b/c/d"
Пример
Попробуем создать уже существующую директорию:
package main
import (
"fmt"
"os"
)
func main() {
path := "test_dir"
perm := 0700
// Создаем директорию в первый раз
err := os.MkdirAll(path, os.FileMode(perm))
if err != nil {
fmt.Println("First error:", err)
return
}
// Пытаемся создать ту же директорию повторно
err = os.MkdirAll(path, os.FileMode(perm))
if err != nil {
fmt.Println("Second error:", err)
return
}
fmt.Println("Directory already exists, no error")
}
Результат выполнения кода:
"Directory already exists, no error"
Пример
Обработаем ошибку, если не удается создать каталог из-за недостатка прав:
package main
import (
"fmt"
"os"
)
func main() {
path := "/root/forbidden_dir"
perm := 0755
err := os.MkdirAll(path, os.FileMode(perm))
if err != nil {
fmt.Println("Error:", err)
return
}
fmt.Println("Success")
}
Результат выполнения кода (будет выведена ошибка доступа):
"Error: mkdir /root: permission denied"
Смотрите также
-
функцию
os.Mkdir,
которая создает только одну директорию без родительских -
функцию
os.RemoveAll,
которая рекурсивно удаляет директорию и все ее содержимое -
функцию
os.MkdirTemp,
которая создает временную директорию с уникальным именем -
функцию
os.Stat,
которая возвращает информацию о файле или директории