Тип syscall.Errno
Тип syscall.Errno представляет собой числовой код ошибки,
возвращаемый системными вызовами в операционных системах семейства
Unix. Он реализует интерфейс error, поэтому может
использоваться как обычная ошибка в Go. В первый параметр
функции передается целочисленный код ошибки, который обычно
возвращается из системных вызовов.
Синтаксис
type Errno uintptr
Для преобразования числового кода в ошибку используется приведение типа:
err := syscall.Errno(2)
Пример
Давайте создадим ошибку с кодом 2, который соответствует
ошибке "No such file or directory":
package main
import (
"fmt"
"syscall"
)
func main() {
err := syscall.Errno(2)
fmt.Println(err)
}
Результат выполнения кода:
"no such file or directory"
Пример
Проверим, реализует ли тип syscall.Errno интерфейс
error:
package main
import (
"fmt"
"syscall"
)
func main() {
var err error
err = syscall.Errno(13)
fmt.Println(err.Error())
}
Результат выполнения кода:
"permission denied"
Пример
Сравним код ошибки с константами из пакета syscall:
package main
import (
"fmt"
"syscall"
)
func main() {
err := syscall.Errno(13)
if err == syscall.EACCES {
fmt.Println("Permission denied")
}
}
Результат выполнения кода:
"Permission denied"
Пример
Получим ошибку при попытке открыть несуществующий файл:
package 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())
}
}
}
Результат выполнения кода:
"Error code: 2, message: no such file or directory"
Смотрите также
-
функцию
syscall,
которая предоставляет интерфейс к системным вызовам -
функцию
syscall.Exec,
которая заменяет текущий процесс на новый -
функцию
syscall.Kill,
которая отправляет сигнал процессу -
функцию
syscall.Getpid,
которая возвращает идентификатор текущего процесса