Как избежать ошибки sh сервера Golang (Gin Goni c) на INTERNAL_ERROR - PullRequest
0 голосов
/ 08 мая 2020

во-первых: я новичок в Go, я за годы разработки java.

Я разработал небольшой REST API, используя Gin Goni c. Одна из моих конечных точек иногда (поэтому я не могу воспроизвести по запросу) дает сбой во время HTTP Get к внешнему API, которым я не управляю. Отображаемая ошибка выглядит примерно так:

ошибка потока: идентификатор потока 4; ВНУТРЕННЯЯ_ОШИБКА

Выдержка из сбоя кода:

client := &http.Client{}
req, err := http.NewRequest("GET", apiUrl, nil)
if err != nil{
    log.Fatal(err)
    return result, err
}
resp, err := client.Do(req)
if err != nil {
    log.Fatal(err)
    return result, err
}
defer resp.Body.Close()

Это приводит к сбою моего сервера и его остановке.

Я не понимаю, что происходит, я ' m обрабатывает все ошибки в коде, поэтому это выглядит как неперехваченное исключение по сравнению с java, но я не знаю, как отловить эту ошибку и сохранить работоспособность моего сервера (меня не волнует, как избежать самой ошибки, Я просто хочу, чтобы мой сервер продолжал работать).

Ответы [ 2 ]

0 голосов
/ 08 мая 2020

В gin-gonic вы можете использовать gin.Recover() промежуточное ПО, которое помогает вашему приложению восстанавливаться после pani c.

Вы можете использовать создание экземпляра через gin.New() или через gin.Default() (оно уже включено)

handlers := gin.New()
handlers.Use(gin.Recovery())
0 голосов
/ 08 мая 2020

лог.Fatal делает выход (тупой, спасибо Volker)

...