@
joesonw 然而绝大多数场景就是只有在错误发生的位置抓 stacktrace ,其他层级无脑往上抛。
比如常见的一个服务的调用,展开之后是这个结构:
handler.getCompanyAdminList(companyId) (list, err) {
// 封装了校验和调用 service
// ...
list, err := service.getCompanyAdmin( companyId ) (list, err) {
// 封装了获取 admin 和拼接 admin 权限
// ...
list, err := adminRepo.getCompanyAdmin() (list, err) {
// 封装了取 cache 和 orm
// ...
list, err := orm.getCompanyAdmin() {
// 封装 db
list, err := db.select()
if err!=nil { 1
// log
return nil, err
}
}
if err!=nil { 2
return nil, err
}
// ...
// 其他业务代码
}
if err!=nil { 3
return nil, err
}
// ...
// 其他业务代码
}
if err!=nil { 4
return nil, err
}
// ...
// 其他业务代码
}
只有 1 需要 log ,然后抛出错误到最外层,根据错误直接返回 response 。2 、3 、4 步骤就是无脑略过。