Функция os.IsTimeout

Функция os.IsTimeout проверяет, является ли переданная ошибка ошибкой таймаута. Она возвращает true, если ошибка связана с истечением времени ожидания операции, и false в противном случае. В единственный параметр функция принимает ошибку типа error, которую нужно проверить.

Эта функция полезна при работе с операциями ввода-вывода, которые могут завершиться по таймауту, например, при чтении из сетевого соединения или при работе с файлами в системах с ограничением времени выполнения операций.

Синтаксис

goos.IsTimeout(err error) bool

Пример

Давайте проверим, является ли ошибка, возвращаемая при операции с таймаутом, ошибкой таймаута. Создадим кастомную ошибку, реализующую интерфейс net.Error с методом Timeout, возвращающим true:

gopackage main

import (
  "fmt"
  "os"
)

type timeoutError struct{}

func (e timeoutError) Error() string {
  return "operation timed out"
}

func (e timeoutError) Timeout() bool {
  return true
}

func (e timeoutError) Temporary() bool {
  return false
}

func main() {
  err := timeoutError{}
  res := os.IsTimeout(err)
  fmt.Println(res)
}

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

gotrue

Пример

Теперь давайте проверим, что обычная ошибка не считается ошибкой таймаута:

gopackage main

import (
  "fmt"
  "os"
)

func main() {
  err := fmt.Errorf("some error")
  res := os.IsTimeout(err)
  fmt.Println(res)
}

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

gofalse

Пример

Рассмотрим реальный пример с использованием net.Dial и установкой таймаута. Если операция подключения завершится по таймауту, функция вернет true:

gopackage main

import (
  "fmt"
  "net"
  "os"
  "time"
)

func main() {
  conn, err := net.DialTimeout("tcp", "example.com:80", 1*time.Nanosecond)
  if err != nil {
    res := os.IsTimeout(err)
    fmt.Println(res)
    return
  }
  defer conn.Close()
}

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

gotrue

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

  • функцию os.IsNotExist,
    которая проверяет ошибку на отсутствие файла или директории
  • функцию os.IsExist,
    которая проверяет ошибку на существование файла или директории
  • функцию os.IsPermission,
    которая проверяет ошибку на недостаток прав доступа
  • тип os.PathError,
    который представляет ошибку, связанную с путем к файлу