golang 糟糕的错误处理
温馨提示:这篇文章已超过390天没有更新,请注意相关的内容是否还可用!
关于golang的糟糕错误处理,我持反对意见,因此写个博客记录一下
(图片来源网络,侵删)
golang的书中说:像下面代码一样,创建一个布尔型变量用于测试错误条件是多余的:
然而在个人看来,代码非常完美,言简意赅,一个bool就控制了if条件,多么清晰,golang设计者一点也没考虑实际业务场景
var good bool
// 测试一个错误,`good` 被赋为 `true` 或者 `false`
if !good {
return errors.New("things aren’t good")
}
书中还说了:避免错误检测使代码变得混乱:避免写出这样的代码:
个人看法:golang的语言设计者,完全没考虑实际业务场景和开发人员会遇到什么样的开发场景,遇到什么样的产品,遇到什么样的开发周期,当需求来了要你今天开发,明天就上线,就只能这样写代码,语言的设计者就设定了代码中不得不出现很多的err的判断,又说这个很混乱,简直是自取其辱!~
... err1 := api.Func1()
if err1 != nil {
fmt.Println("err: " + err.Error())
return
}
err2 := api.Func2()
if err2 != nil {
...
return
}
书里面又说了:首先,包括在一个初始化的 if 语句中对函数的调用。但即使代码中到处都是以 if 语句的形式通知错误(通过打印错误信息)。通过这种方式,很难分辨什么是正常的程序逻辑,什么是错误检测或错误通知。还需注意的是,大部分代码都是致力于错误的检测。通常解决此问题的好办法是尽可能以闭包的形式封装你的错误检测,例如下面的代码:
个人看法:首先,下面的代码确实要优雅一些,但是,实际场景,不可能这么完美,出入参,方法A是结构体,方法B是数组,方法C是字符串,根本不能写一个handler来全部处理,设计的人既然想到了使用handler来举例统一处理请求的检查,为什么就非要设定err呢?
func httpRequestHandler(w http.ResponseWriter, req *http.Request) {
err := func () error {
if req.Method != "GET" {
return errors.New("expected GET")
}
if input := parseInput(req); input != "command" {
return errors.New("malformed command")
}
// 可以在此进行其他的错误检测
} ()
if err != nil {
w.WriteHeader(400)
io.WriteString(w, err)
return
}
doSomething() ...
免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!
