比如数据库服务吧。
程序启动,先连 db 。连成功。启动 web 服务。然后 setup 路由啥的一堆。
好,服务启动成功了。
现在接受 http 请求,此时数据库崩了。
gorm 返回了 err 。比如代码如下
// userRepository.go
func GetUser(uid int64) (*User, error) {
user:=new(User)
if err :=db.model(user).Find(user).err; err != nil {
return nil,err
} else { return user, nil }
}
按照 java/php 这种的逻辑。我可以抛出个异常。然后有个地方是处理这个特殊的异常。返回 500,db no connection 。
go 里边咋做呢?现在数据库崩了以后,被业务中间件拦截到了 返回 401 unauthorized 。
repository 由 http 服务调用。我要直接 panic 吗 0.0 http 的中间件 recover 住判断 err 是哪种错误? 这么粗暴的吗?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.