Проверка ошибок соединения на клиенте
Тестирую свой микросервис, но не могу понять как отловить некоторые ошибки соединения. Например, сервис "отвалился", получаю "dial tcp 127.0.0.1:3000: connectex: No connection could be made because the target machine actively refused it". Но как ее отловить на клиенте? Ниже попытки, которые не работают:
package main
import (
"fmt"
"time"
"net/http"
//"net/url"
//"errors"
)
func main() {
for {
urlPath := fmt.Sprintf("http://localhost:3000/converter/html?file=%s", "1.docx")
resp, err := http.Get(urlPath)
// запрос клиента когда сервис не был запущен
//*url.Error &url.Error{Op:"Get", URL:"http://localhost:3000/converter/html?file=1.docx", Err:(*net.OpError)(0xc0001a4050)}
fmt.Printf("%v %T %#v \n", resp, err, err)
// как вытащить самую внутреннюю ошибку?
//fmt.Printf("%v \n", err.Unwrap()) // не работает - нет такого метода, хотя он есть
//fmt.Printf("%s %v\n", err.Err, err.Op) // не работает - нет таких полей, хотя они есть
//if errors.Is(err, url.Error) { // не работает
// fmt.Println(err)
//}
time.Sleep(1000)
}
}
Ответы (1 шт):
Автор решения: Ainar-G
→ Ссылка
errors.As:
if err != nil {
var uerr *url.Error
if errors.As(err, &uerr) {
log.Println(uerr.Err, uerr.Op)
}
}
Помимо этого, для создания URL надо использовать пакет
net/url,
а time.Sleep(1000) — явная ошибка, так
как надо использовать time.Millisecond и ему подобные.