Функция os.MkdirAll

Функция os.MkdirAll создает каталог с указанным именем и всеми необходимыми родительскими каталогами. Она принимает два параметра: путь в виде строки и права доступа в виде fs.FileMode. Возвращает ошибку, если операция не удалась. Если конечный каталог уже существует, функция вернет nil (при условии, что путь существует и является директорией).

Синтаксис

goerr := os.MkdirAll(path string, perm fs.FileMode)

Пример

Создадим вложенную структуру каталогов:

gopackage 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)
}

Результат выполнения кода:

go"Directories created: a/b/c/d"

Пример

Попробуем создать уже существующую директорию:

gopackage 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")
}

Результат выполнения кода:

go"Directory already exists, no error"

Пример

Обработаем ошибку, если не удается создать каталог из-за недостатка прав:

gopackage 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")
}

Результат выполнения кода (будет выведена ошибка доступа):

go"Error: mkdir /root: permission denied"

Смотрите также

  • функцию os.Mkdir,
    которая создает только одну директорию без родительских
  • функцию os.RemoveAll,
    которая рекурсивно удаляет директорию и все ее содержимое
  • функцию os.MkdirTemp,
    которая создает временную директорию с уникальным именем
  • функцию os.Stat,
    которая возвращает информацию о файле или директории