Функция os.IsPermission

Функция os.IsPermission проверяет, является ли переданная ошибка ошибкой доступа (permission denied). Она возвращает true, если ошибка сигнализирует о том, что у программы недостаточно прав для выполнения операции с файлом или директорией. В противном случае возвращается false. Функция принимает один параметр - ошибку error, которую вернула одна из функций пакета os при работе с файловой системой.

Синтаксис

goos.IsPermission(err)

Пример

Попробуем открыть файл для записи, на который у нас нет прав, и проверить ошибку с помощью os.IsPermission:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  file, err := os.OpenFile("/root/secret.txt", os.O_WRONLY, 0644)
  if err != nil {
    if os.IsPermission(err) {
      fmt.Println("Permission denied")
    } else {
      fmt.Println("Other error:", err)
    }
    return
  }
  defer file.Close()
  fmt.Println("File opened successfully")
}

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

go"Permission denied"

Пример

Проверим ошибку, возникшую при попытке записи в файл в директории только для чтения:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  err := os.WriteFile("/readonly-dir/file.txt", []byte("data"), 0644)
  if err != nil {
    if os.IsPermission(err) {
      fmt.Println("Write operation failed due to permission")
    } else {
      fmt.Println("Other error:", err)
    }
  } else {
    fmt.Println("File written successfully")
  }
}

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

go"Write operation failed due to permission"

Пример

Функция os.IsPermission возвращает false, если ошибка не связана с правами доступа, например, при попытке открыть несуществующий файл:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  _, err := os.Open("nonexistent.txt")
  if err != nil {
    if os.IsPermission(err) {
      fmt.Println("Permission error")
    } else {
      fmt.Println("Other error:", err)
    }
  }
}

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

go"Other error: open nonexistent.txt: no such file or directory"

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

  • функцию os.IsNotExist,
    которая проверяет, существует ли файл или директория
  • функцию os.IsExist,
    которая проверяет, существует ли файл или директория
  • функцию os.IsTimeout,
    которая проверяет, истекло ли время ожидания операции
  • функцию os.Stat,
    которая возвращает информацию о файле или директории