Доступ к методу Timeout () из ошибки * urlError в пакете net / http - PullRequest
0 голосов
/ 21 июня 2020

Я получаю доступ к веб-странице с помощью функции Client.Get (url).

timeout := time.Duration(wgetTimeout) * time.Second
client := http.Client{Timeout: timeout}

// Get page and check for error (timeout, http ...)
res, err := client.Get(url)
if err != nil {
    return "", err
}
defer res.Body.Close()

Функция Client.Get () do c говорит, что:

Любая возвращаемая ошибка будет иметь тип * url.Error. Метод Timeout значения url.Error сообщит истину, если истекло время ожидания запроса.

Как мне получить доступ к таким методам url.Error, как bool Timeout ()?

Решение опубликовано здесь требует использования функции Client.Do ().

Ответы [ 2 ]

2 голосов
/ 21 июня 2020

GoDo c: введите * url.Error

if e, ok := err.(*url.Error); ok && e.Timeout() {
    log.Fatal("timeout is: ", e.Timeout())
} else if err != nil {
    panic(err)
}
0 голосов
/ 21 июня 2020

Используйте os.IsTimeout , чтобы определить, есть ли у ошибки метод Timeout (), возвращающий истину.

res, err := client.Get(url)
if os.IsTimeout(err) {
    // handle timeout
} else if err != nil {
    return "", err
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...