-
Golang在工程实践中的错误处理 彭友顺 石墨文档 产研负责人 目 录 为什么我们处理错误会这么慢 01 如何完善错误信息 02 优雅处理错误信息 03 分布式错误处理 04 错误信息手册的必要性 05 为什么我们处理错误 会这么慢 第一部分 错误信息不够完善 why 原因 出现 错误 定位 慢 恢复 慢 效率低 为什么我们处理错误会这么慢 错误处理不够优雅 分布式错误难以串联 优雅处理错误信息 第三部分 为什么定位慢?-- 错误处理 不要透传错误 错误码唯一性 记录一次错误 假设用户反馈了无法打开一个文件 我们的程序员非常认真 记录了文件不存在的错误日志 • 同样的错误信息,非常多的杂音 • 每个Error,都去查看一次对应代码,排查效率低 • 占用存储空间 • 最外层入口处只记录一次错误日志 为什么定位慢?-- 错误处理 带来新的问题,无法定位整个代码执行链路 日志分析不出是哪个service 调用了MySQL 为什么定位慢?-- 错误处理 带来新的问题,无法定位整个代码执行链路 不要透传错误 错误码唯一性 记录一次错误 • 不能透传错误,fmt.Errorf • 如果不考虑性能 • 日志开启Stack • 错误追加Stack 为什么定位慢?-- 错误处理 不要透传错误 错误码唯一性 记录一次错误 文件不存在 数据表里不存在
0 码力 |
30 页 |
3.11 MB
| 1 年前 3
-
什么优点么?在本小节中我们没有讲到两者的对比及Promise的优点。在接下来的章节 中,我们将会对Promise优点之一,即错误处理机制进行介绍,以及和传统的回调方式 的对比。 Chapter.2 - 实战Promise 本章我们将会学习Promise提供的各种方法以及如何进行错误处理。 Promise.resolve 一般情况下我们都会使用 new Promise() 来创建promise对象,但是除此之外我们也可 返回了一个Rejected状态的promise对象 在 第一章 中我们已经看到,Promise中的处理习惯上都会采用 try-catch 的风格,当发 生异常的时候,会被 catch 捕获并被由在此函数注册的回调函数进行错误处理。 另一种异常处理策略是通过 返回一个Rejected状态的promise对象 来实现的,这种方法 不通过使用 throw 就能在promise chain中对 onRejected 进行调用。 error(error); }); 将上述代码和回调函数风格相比,我们可以得到如下结论。 • 可以直接使用 JSON.parse 函数 • 函数 main() 返回promise对象 • 错误处理的地方直接对返回的promise对象进行处理 向前面我们说的那样,main的 then 部分有点晦涩难懂。 为了应对这种需要对多个异步调用进行统一处理的场景,Promise准备了 Promise
0 码力 |
112 页 |
1010.02 KB
| 1 年前 3
-
. . . . 65 线程池策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 错误处理策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66 6.2.9 作业属性配置 . . 线程池策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 7.3 错误处理策略 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79 iii 7.4 作业类名称提供策略 // 创建注册中心 } } 6.1. 使用手册 27 Apache ShardingSphere ElasticJob document 配置错误处理策略 使用 ElasticJob 过程中当作业发生异常后,可采用以下错误处理策略。 错误处理策略名 称 说明 是 否 内 置 是 否 默 认 是否需要额外配 置 记录日志策略 记录作业异常日志,但不中断作业执行 是 是 抛出异常策略
0 码力 |
98 页 |
1.97 MB
| 1 年前 3
-
国际化和本地化 10.1 设置默认地区 10.2 本地化资源 10.3 国际化站点 4 10.4 小结 11.错误处理,调试和测试 11.1 错误处理 11.2 使用GDB调试 11.3 Go怎么写测试用例 11.4 小结 12.部署与维护 12.1 应用日志 12.2 网站错误处理 12.3 应用部署 12.4 备份和恢复 12.5 小结 13.如何设计一个Web框架 13.1 项目规划 者那些缺失的地方,请一起参与到这个开 源项目中来,让我们的这个库争取成为Go的标准库。 links links 目录 上一节: 国际化站点 下一节: 错误处理,故障排除和测试 225 11 错误处理,调试和测试 11 错误处理,调试和测试 我们经常会看到很多程序员大部分的"编程"时间都花费在检查bug和修复bug上。无论你是在编写修改代码还是重构系 统,几乎都是花费大量的时间在进 但是遗憾的是很多程序员不愿意在错误处理、调试和测试能力上下工夫,导致后面应用上线之后查找错误、定位问题 花费更多的时间。所以我们在设计应用之前就做好错误处理规划、测试用例等,那么将来修改代码、升级系统都将变 得简单。 开发Web应用过程中,错误自然难免,那么如何更好的找到错误原因,解决问题呢?11.1小节将介绍Go语言中如何处 理错误,如何设计自己的包、函数的错误处理,11.2小节将介绍如何使用
0 码力 |
295 页 |
5.91 MB
| 1 年前 3
-
goroutine channels Buffered Channels Range和Close Select 超时 runtime goroutine 错误处理 Error类型 自定义Error 错误处理 总结 更多Golang资源包:https://github.com/0voice/Introduction-to-Golang 关键字 Go语言设计的关键字,了解这些关键字有助于命名变量的冲突避免 返回正在执行和排队的任务总数 GOMAXPROCS : 用来设置可以并行计算的CPU核数的最大值,并返回之前的值。 错误处理 Go语言主要的设计准则是:简洁、明白,简洁是指语法和C类似,相当的简单,明白是指任何语句都是 很明显的,不含有任何隐含的东西,在错误处理方案的设计中也贯彻了这一思想。 在C语言里面是通过返回 -1 或者 NULL 之类的信息来表示错误,但是对于使用者来说,不查看相应的API os.Open 打开一个文件,如果出现错误,那么就会调用 log.Fatal 来输出错误信 息: 类似于 os.Open 函数,标准包中所有可能出错的API都会返回一个 error 变量,以方便错误处理,这个 小节将详细地介绍 error 类型的设计,和讨论开发Web应用中如何更好地处理 error 。 Error类型 error类型是一个接口类型,这是它的定义: error是一个内置的接口类型,可以在
0 码力 |
47 页 |
1020.34 KB
| 1 年前 3
-
数据 12.10 XML 数据格式 12.11 用 Gob 传输数据 12.12 Go 中的密码学 第13章:错误处理与测试 13.1 错误处理 13.2 运行时异常和 panic 13.3 从 panic 中恢复(Recover) 13.4 自定义包中的错误处理和 panicking 13.5 一种用闭包处理错误的模式 13.6 启动外部命令和程序 13.7 Go 中的单元测试和基准测试 16.5 不需要将一个指向切片的指针传递给函数 16.6 使用指针指向接口类型 16.7 使用值类型时误用指针 16.8 误用协程和通道 16.9 闭包和协程的使用 16.10 糟糕的错误处理 第 17章 模式 17.1 关于逗号ok模式 第 18章 出于性能考虑的实用代码片段 18.1 字符串 18.2 数组和切片 18.3 映射 18.4 结构体 18.5 接口 18 语言的函数式和面 向对象编程进行透彻的讲解,包括如何使用 Go 语言来构造大型项目(第 9 章)。 在本书的第三部分,你将会学习到如何处理不同格式的文件(第 12 章)和如何在 Go 语言中巧妙地使用错误处理机 制(第 13 章)。然后我们会对 Go 语言中最值得称赞的设计 goroutine 和 channel 进行并发和多核应用的基 本技巧的讲解(第 14 章)。最后,我们会讨论如何将 Go 语言应用到分布式和
0 码力 |
466 页 |
4.44 MB
| 1 年前 3
-