比如数据库服务吧。
程序启动,先连 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 是哪种错误? 这么粗暴的吗?
|