Rest 如何避免Golang服务器(Gin Gonic)因内部错误而崩溃

Rest 如何避免Golang服务器(Gin Gonic)因内部错误而崩溃,rest,go,error-handling,crash,go-gin,Rest,Go,Error Handling,Crash,Go Gin,首先:我是新手,我来自多年的java开发 我使用gingonic开发了一个小的restapi。 我的一个端点偶尔(因此我无法按需复制)在HTTP访问我无法管理的外部API时崩溃。显示的错误类似于: 流错误:流ID 4;内部错误 代码崩溃的摘录: client := &http.Client{} req, err := http.NewRequest("GET", apiUrl, nil) if err != nil{ log.Fatal(err) return resul

首先:我是新手,我来自多年的java开发

我使用gingonic开发了一个小的restapi。 我的一个端点偶尔(因此我无法按需复制)在HTTP访问我无法管理的外部API时崩溃。显示的错误类似于:

流错误:流ID 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()
这会使我的服务器崩溃并停止


我不知道发生了什么,我正在处理代码中的所有错误,因此与java相比,它看起来像是一个未捕获的异常,但我不知道如何捕获该错误并保持服务器运行(我不关心如何避免错误本身,我只希望我的服务器继续运行)。

log.Fatal退出(愚蠢的我,谢谢Volker)

log.Fatal退出(dumb me,感谢Volker)

gin gonic
中,您可以使用
gin.Recover()
中间件帮助您的应用程序从恐慌中恢复

您可以通过
gin.New()
或通过
gin.Default()
使用实例化(它已经包含在内)

handlers:=gin.New()
handlers.Use(gin.Recovery())

gin-gonic
中,您可以使用
gin.Recover()
中间件帮助您的应用程序从死机中恢复

您可以通过
gin.New()
或通过
gin.Default()
使用实例化(它已经包含在内)

handlers:=gin.New()
handlers.Use(gin.Recovery())

您需要更新有关主函数和错误消息的更多信息。基本上,您可以在go中使用recover。例如,defer func(){if r:=recover();r!=nil{fmt.Println(“在f中恢复,r)}}}()。你自己的代码会使服务器崩溃!如果调用log.Fatal,服务器将立即终止。别那么做。这有点像问:“当它用锤子敲击我的拇指时,如何避免疼痛?”:不要用锤子敲击你的拇指。还有一个好建议。不要猜测函数的功能,但一定要阅读它们的完整文档,包括整个软件包文档。与例如Javadoc不同,godoc包含有价值和需要的信息。哦,我的天哪,我从来没有猜到一个日志函数可以退出。。。太多的期待行为,没有足够的阅读博士,正如你所说,谢谢!您需要更新有关主函数和错误消息的更多信息。基本上,您可以在go中使用recover。例如,defer func(){if r:=recover();r!=nil{fmt.Println(“在f中恢复,r)}}}()。你自己的代码会使服务器崩溃!如果调用log.Fatal,服务器将立即终止。别那么做。这有点像问:“当它用锤子敲击我的拇指时,如何避免疼痛?”:不要用锤子敲击你的拇指。还有一个好建议。不要猜测函数的功能,但一定要阅读它们的完整文档,包括整个软件包文档。与例如Javadoc不同,godoc包含有价值和需要的信息。哦,我的天哪,我从来没有猜到一个日志函数可以退出。。。太多的期待行为,没有足够的阅读博士,正如你所说,谢谢!如果您将更改为
log.Panic
并使用
gin.Recover
,它将解决您的问题。如果您将更改为
log.Panic
并使用
gin.Recover
,它将解决您的问题。