Функция os.IsTimeout
Функция os.IsTimeout проверяет, является ли переданная ошибка ошибкой таймаута.
Она возвращает true, если ошибка связана с истечением времени ожидания операции,
и false в противном случае. В единственный параметр функция принимает ошибку
типа error, которую нужно проверить.
Эта функция полезна при работе с операциями ввода-вывода, которые могут завершиться по таймауту, например, при чтении из сетевого соединения или при работе с файлами в системах с ограничением времени выполнения операций.
Синтаксис
os.IsTimeout(err error) bool
Пример
Давайте проверим, является ли ошибка, возвращаемая при операции с таймаутом,
ошибкой таймаута. Создадим кастомную ошибку, реализующую интерфейс net.Error
с методом Timeout, возвращающим true:
package 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)
}
Результат выполнения кода:
true
Пример
Теперь давайте проверим, что обычная ошибка не считается ошибкой таймаута:
package main
import (
"fmt"
"os"
)
func main() {
err := fmt.Errorf("some error")
res := os.IsTimeout(err)
fmt.Println(res)
}
Результат выполнения кода:
false
Пример
Рассмотрим реальный пример с использованием net.Dial и установкой таймаута.
Если операция подключения завершится по таймауту, функция вернет true:
package 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()
}
Результат выполнения кода (зависит от системы, но обычно):
true
Смотрите также
-
функцию
os.IsNotExist,
которая проверяет ошибку на отсутствие файла или директории -
функцию
os.IsExist,
которая проверяет ошибку на существование файла или директории -
функцию
os.IsPermission,
которая проверяет ошибку на недостаток прав доступа -
тип
os.PathError,
который представляет ошибку, связанную с путем к файлу