Тип syscall.Errno

Тип syscall.Errno представляет собой числовой код ошибки, возвращаемый системными вызовами в операционных системах семейства Unix. Он реализует интерфейс error, поэтому может использоваться как обычная ошибка в Go. В первый параметр функции передается целочисленный код ошибки, который обычно возвращается из системных вызовов.

Синтаксис

gotype Errno uintptr

Для преобразования числового кода в ошибку используется приведение типа:

goerr := syscall.Errno(2)

Пример

Давайте создадим ошибку с кодом 2, который соответствует ошибке "No such file or directory":

gopackage main

import (
  "fmt"
  "syscall"
)

func main() {
  err := syscall.Errno(2)
  fmt.Println(err)
}

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

go"no such file or directory"

Пример

Проверим, реализует ли тип syscall.Errno интерфейс error:

gopackage main

import (
  "fmt"
  "syscall"
)

func main() {
  var err error
  err = syscall.Errno(13)
  fmt.Println(err.Error())
}

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

go"permission denied"

Пример

Сравним код ошибки с константами из пакета syscall:

gopackage main

import (
  "fmt"
  "syscall"
)

func main() {
  err := syscall.Errno(13)
  if err == syscall.EACCES {
    fmt.Println("Permission denied")
  }
}

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

go"Permission denied"

Пример

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

gopackage main

import (
  "fmt"
  "os"
  "syscall"
)

func main() {
  _, err := os.Open("/nonexistent/file")
  if err != nil {
    if errno, ok := err.(syscall.Errno); ok {
      fmt.Printf("Error code: %d, message: %s\n", errno, errno.Error())
    }
  }
}

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

go"Error code: 2, message: no such file or directory"

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

  • функцию syscall,
    которая предоставляет интерфейс к системным вызовам
  • функцию syscall.Exec,
    которая заменяет текущий процесс на новый
  • функцию syscall.Kill,
    которая отправляет сигнал процессу
  • функцию syscall.Getpid,
    которая возвращает идентификатор текущего процесса