golang 糟糕的错误处理

关于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() ...

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/725414.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PDF处理控件aspose.PDF功能演示:将 PDF 转换为 Word 文档

在 Web 应用程序中处理文档时,将 PDF 文件无缝转换为 Word 文档的能力是一项宝贵的资产。此任务不仅常见,而且对于文档转换器和编辑器、从编辑和协作到内容提取的各种应用程序来说也是必不可少的。在这篇博文中,我们将探讨如何使用 JavaScrip…

算法中常用知识

定义大值和小值 NT_MIN在标准头文件limits.h中定义。 #define INT_MAX 2147483647 #define INT_MIN (-INT_MAX - 1) int ans INT_MIN;在C/C语言中,不能够直接使用-2147483648来代替最小负数,因为这不是一个数字,而是一个表达式。表达式的意…

JVM性能优化之--JIT即时编译

如果我们想将源Java文件运行,需要进行如下步骤: 使用类加载器将Java文件实时编译成class文件,也就是字节码指令使用JVM将编译后的字节码指令,解释为机器码,这是计算机可以直接执行的指令计算机直接执行 但是这其中由…

挑战杯 基于深度学习的植物识别算法 - cnn opencv python

文章目录 0 前言1 课题背景2 具体实现3 数据收集和处理3 MobileNetV2网络4 损失函数softmax 交叉熵4.1 softmax函数4.2 交叉熵损失函数 5 优化器SGD6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的植物识别算法 ** …

预览和真机调试无法连接服务器(报网络错误),开发者工具可以正常用

预览和真机调试无法连接服务器(报网络错误),开发者工具可以正常用 方法: localhost替换为下面的ip,手机和电脑都链接同一个wifi // let RootPath http://127.0.0.1:8081;//或者http://localhost:8081let RootPath ht…

CSS:让动画流畅生动的缓动函数

在CSS中&#xff0c;可以使用transition属性或者keyframes关键帧动画来创建动画效果。 使用缓动函数则可以让动画更加流畅和生动。 div {transition: <property> <duration> <timing-function> <delay>; }div {animation: <keyframes-name> &l…

CSS、less、Sass、Scss、Stylus的认识

Sass、Scss、Less和Stylus区别总结_stylus scss-CSDN博客

鸿蒙Harmony应用开发—ArkTS声明式开发(事件独占控制)

设置组件是否独占事件&#xff0c;事件范围包括组件自带的事件和开发者自定义的点击、触摸、手势事件。 在一个窗口内&#xff0c;设置了独占控制的组件上的事件如果首先响应&#xff0c;则本次交互只允许此组件上设置的事件响应&#xff0c;窗口内其他组件上的事件不会响应。 …

AndroidStudio连不上adb报错ADB Connection Error

之前笔者一直通过AndroidStudio来看日志&#xff0c;也一直用的一套自己的SDK&#xff0c;用了好几年了。 但是突然有一天&#xff0c;AndroidStudio启动后就弹出警告窗&#xff1a;ADB Connection Error&#xff0c;如下&#xff1a; 在Event Log面板还持续性的输出&#x…

想在Vue中使用v-for来循环遍历一组对象,但只循环三次

想在Vue中使用v-for来循环遍历一组对象&#xff0c;但只想循环三次&#xff0c;你可以通过一些方法来达到这个目的。下面是一些建议的方法&#xff1a; 1. 使用数组的切片方法 如果你的对象是在一个数组中&#xff0c;你可以使用数组的slice()方法来只取数组的前三个元素。 v…

C++——string类

前言&#xff1a;哈喽小伙伴们&#xff0c;从这篇文章开始我们将进行若干个C中的重要的类容器的学习。本篇文章将讲解第一个类容器——string。 目录 一.什么是string类 二.string类常见接口 1.string类对象的常见构造 2.string类对象的容量操作 3. string类对象的访问及遍…

微软亚太区AI智能应用创新业务负责人许豪,将出席“ISIG-AIGC技术与应用发展峰会”

3月16日&#xff0c;第四届「ISIG中国产业智能大会」将在上海中庚聚龙酒店拉开序幕。本届大会由苏州市金融科技协会指导&#xff0c;企智未来科技&#xff08;AIGC开放社区、RPA中国、LowCode低码时代&#xff09;主办。大会旨在聚合每一位产业成员的力量&#xff0c;深入探索A…

16 PyTorch 神经网络基础【李沐动手学深度学习v2】

1. 模型构造 在构造自定义块之前&#xff0c;我们先回顾一下多层感知机的代码。 下面的代码生成一个网络&#xff0c;其中包含一个具有256个单元和ReLU激活函数的全连接隐藏层&#xff0c; 然后是一个具有10个隐藏单元且不带激活函数的全连接输出层。 层和块 构造单层神经网咯…

智慧安防视频远程监控平台EasyCVR集成后播放只有一帧画面是什么原因?

智慧安防视频监控平台EasyCVR能在复杂的网络环境中&#xff08;专网、局域网、广域网、VPN、公网等&#xff09;将前端海量的设备进行统一集中接入与视频汇聚管理&#xff0c;平台可支持的接入协议包括&#xff1a;国标GB28181、RTSP/Onvif、RTMP&#xff0c;以及厂家的私有协议…

【Power Apps】实现一个响应式的对话框功能

在我们开始之前需要把这里关一下&#xff0c;不然的话会影响响应式布局的效果。 首先我们添加一个垂直容器作为遮罩层。 遮罩层的宽高直接设置为跟随父元素即可&#xff0c;让遮罩层占满整个屏幕&#xff0c;再把填充色改为有一定透明度的黑色&#xff0c;形成遮罩效果。 然后…

远程-debug

java -Xdebug -Xrunjdwp:transportdt_socket,servery,suspendy,address8888 -jar app.jar --server.port2023 & java项目如何远程Debug调试

C# 的一些好用的语法糖介绍

C# 中有很多语法糖&#xff08;Syntactic sugar&#xff09;&#xff0c;它们是一些语言特性&#xff0c;使得编写代码更加简洁、易读、更具表现力。 Lambda 表达式&#xff1a; Lambda 表达式允许你编写简洁的匿名函数。例如&#xff1a; Func<int, int, int> add (a,…

论文翻译 - Visual Adversarial Examples Jailbreak Large Language Models

论文链接&#xff1a;https://arxiv.org/pdf/2306.13213.pdf Visual Adversarial Examples Jailbreak Aligned Large Language Models Abstract1 Introduction2 Related Work3 Adversarial Examples as Jailbreakers3.1 Setup3.2 Our Attack3.3 Implementations of Attackers …

Python教程:time.perf_counter()计算程序运行的时间

time.perf_counter() 是 Python 中的一个函数&#xff0c;它属于 time 模块。它用于测量代码的执行时间&#xff0c;提供了一个高分辨率的性能计数器&#xff0c;通常用于基准测试、性能分析和时间测量。 以下是关于 time.perf_counter() 的一些关键点&#xff1a; 高分辨率&…

【b站咸虾米】1 Vue介绍 2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例

课程地址&#xff1a;【2021最新Vue从基础到实例高级_vue2_vuecli脚手架博客案例】 https://www.bilibili.com/video/BV1pz4y1S7bC/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 感觉尚硅谷的Vue看完忘得差不多了&#xff0c;且之前学过咸虾米的unia…