<分区>
Golang 应用程序应如何处理缺少的外部依赖项? 当一个应用程序启动并且找不到它应该保存数据的数据库时,知道该应用程序在该状态下无用,我应该使应用程序 panic 吗?
否则我可以无限记录一些东西,打印到 stderr,或使用其他方法来通知,但我不确定何时选择每种方法。
标签 go
<分区>
Golang 应用程序应如何处理缺少的外部依赖项? 当一个应用程序启动并且找不到它应该保存数据的数据库时,知道该应用程序在该状态下无用,我应该使应用程序 panic 吗?
否则我可以无限记录一些东西,打印到 stderr,或使用其他方法来通知,但我不确定何时选择每种方法。
最佳答案
无法访问外部网络服务的应用程序不应崩溃。这应该是预料之中的,因为网络往往会失败。我会包装错误并进一步传递它。
考虑以下场景。您有多个应用程序服务器连接到两个数据库服务器。您正在一次升级一个数据库服务器。当其中一个关闭时,一半的应用程序服务器会出现 panic 和崩溃。您升级第二个数据库服务器,现在每个应用程序服务器都消失了。相反,当数据库不可用时,只需通过发送 HTTP 状态 500 来报告错误。如果您有负载平衡器,它将把请求传递给工作中的应用程序服务器。当数据库服务器恢复后,应用服务器重新连接并继续工作。
另一种情况,您正在运行一个处理数据库以创建报告的交互式应用程序。连接不可用。应用程序出现 panic 并崩溃。从用户的角度来看,它看起来像一个错误。我希望收到无法建立连接的消息。
在标准库中,当internal 资源不可用时,会出现 panic 。参见 template.Must .这意味着应用程序本身有问题。
关于go - 如果 Go 应用程序找不到外部依赖项/服务,它是否应该 panic ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49132065/