关键词:
如何进行错误处理,这是一个Go程序员之间,特别是一些新的Go程序员,会经常讨论的问题.讨论到最后往往由于以下代码的多次出现而变成了抱怨.
if err != nil {
return err
}
我们最近扫描了我们能找到的开源项目,这段代码只在一页或者两页中出现了一次,是不是比你想象的少很多.然而,必须到处写 if err != nuil
的感觉依然存在 , 那一定是哪里出了问题,而且明显问题出在Go自己身上.
不幸的是,这是一个误解,而且很容易纠正.或许一个新的Go程序员想问 “怎么会只有一个错误处理?”,那么学习这种模式,保持它.在其它语言中可以使用try-catch或者其他类似机制去处理错误.因此程序员认为,当我需要在其他语言中使用try-catch的时候,我只需要在Go写if err != nil
,随着时间的推移Go代码里会出现很多这样的代码片段,结果感觉很笨拙.
不管这个解释是否符合,很显然这些Go程序员忘记了一个关于错误的基本观点:错误也是值.
值可以被编程,因此错误也是值,错误也可以被编程
Values can be programmed, and since errors are values, errors can be programmed.
当然一个常用的涉及到错误值的语句是测试它是不是nil
, 但是也有无数的其他事情可以用错误值来做.使用一些其他事情可以让你更好的编程,可以很大程度排除使用if语句检查错误的固定模式.
这是一个简单的示例,来自bufio 包的Scanner类型.它的 Scan方法执行底层的I/O操作,显然它可能引起一个错误.然而Scan方法并不会暴露错误.他返回一个布尔值,通过在Scan运行之后执行的另一个方法来报告是否发生了错误.调用代码如下:
错误与异常_2-14选择题(代码片段)
单选题PHP中定义一个文件异常类,实现过程中需要继承的类是?()(选择一项)ExceptionBFileCTryDCatchA 查看详情
go中的错误和异常处理最佳实践
...已收录编程学习笔记。涵盖PHP、JavaScript、Linux、Golang、MySQL、Redis和开源工具等等相关内容。错误认识错误在Go中,错误是一种表示程序错误状态。包含了在程序在运行时、编译时的状态信息。一般我们在编写Go代码中,... 查看详情
go异常处理(代码片段)
...panic和recover什么是panic?在Go语言中,程序中一般是使用[错误]来处理异常情况。对于程序中出现的大部分异常情况,错误就已经够用了。但在有些情况,当程序发生异常时,无法继续运行。在这种情况下,我们会使用panic来终止... 查看详情
go语言之go语言异常处理与测试(代码片段)
...测试Go语言异常处理Go语言没有结构化异常,使用panic抛出错误,recover捕获错误。异常的使用场景简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。panic:1、内置函数2、假如函数F中... 查看详情
怎么学习golang
已经有好多程序员都把Go语言描述为是一种所见即所得(WYSIWYG)的编程语言。这是说,代码要做的事和它在字面上表达的意思是完全一致的。在这些新语言中,包含D,Go,Rust和Vala语言,Go曾一度出现在TIOBE的排行榜上面。与其他新... 查看详情
go错误处理与测试(代码片段)
Go没有像Java和.NET那样的 try/catch 异常机制:不能执行抛异常操作。但是有一套 defer-panic-and-recover 机制(参见13.2-13.3节)。Go的设计者觉得 try/catch 机制的使用太泛滥了,而且从底层向更高的层级抛异常太耗... 查看详情
异常处理(代码片段)
...? 与正常情况不同的就是异常,在程序执行过程中,出现错误导致代码无法执行完毕,就称之为异常 常见异常1AttributeError试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x2IOError输入/输出异常;基本上是无法打开文... 查看详情
错误与异常_2-11选择题(代码片段)
单选题以下方法不属于PHP中Exception类的方法是?()(选择一项)AgetTrace();BgetLine();CgetTr();DgetFile();C 查看详情
错误与异常_2-4选择题(代码片段)
下列关于PHP异常处理机制的说法正确的是()(选择一项) A每个try或throw只能对应一个catch代码块。B当异常被抛出后,其后的代码块会继续执行。然后查找匹配的catch代码块C需要进行异常处理的代码应该放在try代码块内,以... 查看详情
以“有用”为圆心:重新认识智慧城市的“高手之路”
...。针对十一旅游造成的防疫压力,不少权威媒体提出需要加强疫情防控的精细化水平,用动态化、细节化的管理方式来提高防疫效率。面对游客量巨大与旅行中游客快速移动等特点,疫情防控的通报体系与响应系统需... 查看详情
defer,panic,recover
...变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比... 查看详情
go语言重新开始,gomodules的前世今生与基本使用(代码片段)
导语| 随着Go语言发展与场景变化,GOPATH引起的编译依赖、内部自签发证书、安全审计等问题相继出现,随着官方推出的GoModules逐渐完善,用户有了新的选择。本文将会带领大家从0开始,认识并使用GoModules。本文... 查看详情
go语言重新开始,gomodules的前世今生与基本使用(代码片段)
导语| 随着Go语言发展与场景变化,GOPATH引起的编译依赖、内部自签发证书、安全审计等问题相继出现,随着官方推出的GoModules逐渐完善,用户有了新的选择。本文将会带领大家从0开始,认识并使用GoModules。本文... 查看详情
go语言异常panic和恢复recover用法
...变得混乱。因为开发者很容易滥用异常,甚至一个小小的错误都抛出一个异常。在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,才使用Go中引入的Exception处理:defer,panic,re... 查看详情
何时在 C# 中重新引发异常?
】何时在C#中重新引发异常?【英文标题】:WhenRethrowaExceptioninc#?【发布时间】:2020-07-1411:23:31【问题描述】:我已经阅读了为什么我们需要抛出异常并重新抛出它。但是我对何时重新抛出异常感到困惑?我在将throw放入CalculationO... 查看详情
重新认识flashcs6中对象的注册点与中心点
...用新建元件方法创建元件时的情境,650)this.width=650;"title="重新认 查看详情
错误与异常_2-8选择题
单选题下列嵌套异常处理机制正确的是()(选择一项)A B C D 答案A 查看详情
重新认识java—组合聚合与继承的爱恨情仇(代码片段)
...继承,而不考虑究竟该不该使用,无疑,这是错误的。那么,究竟该如何使用继承呢?java中类与类之间的关系大部分的初学者只知道java中两个类之间可以是继承与被继承的关系,可是事实上,类之间... 查看详情