go - 如果 Go 应用程序找不到外部依赖项/服务,它是否应该 panic

标签 go

<分区>

Golang 应用程序应如何处理缺少的外部依赖项? 当一个应用程序启动并且找不到它应该保存数据的数据库时,知道该应用程序在该状态下无用,我应该使应用程序 panic 吗?

否则我可以无限记录一些东西,打印到 stderr,或使用其他方法来通知,但我不确定何时选择每种方法。

最佳答案

无法访问外部网络服务的应用程序不应崩溃。这应该是预料之中的,因为网络往往会失败。我会包装错误并进一步传递它。

考虑以下场景。您有多个应用程序服务器连接到两个数据库服务器。您正在一次升级一个数据库服务器。当其中一个关闭时,一半的应用程序服务器会出现 panic 和崩溃。您升级第二个数据库服务器,现在每个应用程序服务器都消失了。相反,当数据库不可用时,只需通过发送 HTTP 状态 500 来报告错误。如果您有负载平衡器,它将把请求传递给工作中的应用程序服务器。当数据库服务器恢复后,应用服务器重新连接并继续工作。

另一种情况,您正在运行一个处理数据库以创建报告的交互式应用程序。连接不可用。应用程序出现 panic 并崩溃。从用户的角度来看,它看起来像一个错误。我希望收到无法建立连接的消息。

在标准库中,当internal 资源不可用时,会出现 panic 。参见 template.Must .这意味着应用程序本身有问题。

关于go - 如果 Go 应用程序找不到外部依赖项/服务,它是否应该 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132065/

相关文章:

postgresql - 单元测试代码:= runtime error: invalid memory address or nil pointer dereference

go - 生成生成文件

google-app-engine - Appengine数据存储已损坏,如何重置

go - 将一个结构复制到另一个结构具有相同成员和不同类型的结构

go - Google Cloud Go SDK中的ProjectsLocation和ProjectsZone函数/类型之间的区别

go - Zap记录器源代码行

go - 类型声明中的匿名字段?

mysql - 使用 mysqldriver 连接数据库时出错

json - 使用一些已知和一些未知的字段名解码 JSON

forms - 解析来自 HTML <form> 的输入