Go在工程实践的错误处理
Golang在工程实践中的错误处理 彭友顺 石墨文档 产研负责人 目 录 为什么我们处理错误会这么慢 01 如何完善错误信息 02 优雅处理错误信息 03 分布式错误处理 04 错误信息手册的必要性 05 为什么我们处理错误 会这么慢 第一部分 错误信息不够完善 why 原因 出现 错误 定位 慢 恢复 慢 效率低 为什么我们处理错误会这么慢 错误处理不够优雅 分布式错误难以串联 优雅处理错误信息 第三部分 为什么定位慢?-- 错误处理 不要透传错误 错误码唯一性 记录一次错误 假设用户反馈了无法打开一个文件 我们的程序员非常认真 记录了文件不存在的错误日志 • 同样的错误信息,非常多的杂音 • 每个Error,都去查看一次对应代码,排查效率低 • 占用存储空间 • 最外层入口处只记录一次错误日志 为什么定位慢?-- 错误处理 带来新的问题,无法定位整个代码执行链路 日志分析不出是哪个service 调用了MySQL 为什么定位慢?-- 错误处理 带来新的问题,无法定位整个代码执行链路 不要透传错误 错误码唯一性 记录一次错误 • 不能透传错误,fmt.Errorf • 如果不考虑性能 • 日志开启Stack • 错误追加Stack 为什么定位慢?-- 错误处理 不要透传错误 错误码唯一性 记录一次错误 文件不存在 数据表里不存在0 码力 | 30 页 | 3.11 MB | 1 年前3JavaScript Promise迷你书(中文版)
什么优点么?在本小节中我们没有讲到两者的对比及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准备了 Promise0 码力 | 112 页 | 1010.02 KB | 1 年前3Go Web编程
国际化和本地化 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 年前3Go基础语法宝典
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 年前3Go 入门指南(The way to Go)
数据 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 年前3Comprehensive Rust(简体中文) 202412
. . . . . . . . . . . . . . . . . . . . . . . . . . 159 VIII 第四天:下午 162 28 Welcome Back 163 29 错误处理 164 29.1 Panics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164 . . . . . . . . . . . . . . . . . . . 214 37.2.7 Rust 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214 37.2.8 C++ 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45.1 绑定示例 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 45.2 CXX 错误处理 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 45.2.1 CXX Error Handling:0 码力 | 359 页 | 1.33 MB | 10 月前3阮一峰 JavaScript 教程
null,undefined 和布尔值 数值 字符串 对象 函数 数组 运算符 算术运算符 比较运算符 布尔运算符 二进制位运算符 其他运算符,运算顺序 语法专题 数据类型的转换 错误处理机制 编程风格 console 对象与控制台 标准库 Object 对象 属性描述对象 Array 对象 包装对象 Boolean 对象 - 1 - 本文档使用 书栈(BookStack 够。首先,第一版的 JavaScript 里面, null 就像在 Java 里一 样,被当成一个对象,Brendan Eich 觉得表示“无”的值最好不是对 象。其次,那时的 JavaScript 不包括错误处理机制,Brendan Eich 觉得,如果 null 自动转为0,很不容易发现错误。 因此,他又设计了一个 undefined 。区别是这样的: null 是一个表 示“空”的对象,转为数值时为 上面的两行代码,各有三个等号运算符和三个三元运算符,都是先计算 最右边的那个运算符。 其他运算符,运算顺序 - 199 - 本文档使用 书栈(BookStack.CN) 构建 语法专题 数据类型的转换 错误处理机制 编程风格 console 对象与控制台 语法专题 语法专题 - 200 - 本文档使用 书栈(BookStack.CN) 构建 数据类型的转换 数据类型的转换 概述 强制转换0 码力 | 540 页 | 3.32 MB | 10 月前3Go读书会第二期
并发原语的原理与应用模式 • 低级同步原语 (sync 和 atomic) 并发:优先考虑并发设计 Part7 – 错误处理 践行哲学,遵循惯例,认清本质,理解原理 • 错误处理的几种策略 • 优化 if err != nil • Panic 不是错误处理 错误处理:保守与创新 Part8 – 编程实践:测试、调试与性能剖析 践行哲学,遵循惯例,认清本质,理解原理 • Go 测试惯例与组织形式0 码力 | 26 页 | 4.55 MB | 1 年前3ThinkJS 2.2 中文文档
config */ export default { //key: value }; src/common/controller 控制器,放一些通用的控制器。其中 error.js 里错误处理的不同行为,项目里可以根据需要进 行修改。 src/common/runtime 项目运行时生成的一些目录,如:缓存文件目录,用户上传的文件临时存放的目录。 src/home home staff 204 Sep 8 19:14 home/ common 模块 common 模块是个通用模块,该模块下存放一些通用的功能,如: 通用的配置,runtime 目录, 启动文件,错误处理控制器等。 注 :该模块下的控制器不能响应用户的请求。 默认模块 默认模块为 home 模块。当解析用户的请求找不到模块时会自动对应到 home 下。 可以通过配置 default_module * @return {Promise} [] */ __call(){ ... } } 错误处理 当 url 不存在或者当前用户没权限等一些异常请求时,这时候会调用错误处理。 ThinkJS 内置了一 套详细的错误处理机制,具体请见 扩展功能 -> 错误处理。 数据校验 控制器里在使用用户提交的数据之前,需要对数据合法性进行校验。为了降低控制器里的逻辑复 杂度,ThinkJS0 码力 | 277 页 | 3.61 MB | 1 年前3OpenShift Container Platform 4.7 日志记录
jackson-databind: jboss-common-core 类中的不正确的 polymorphic deserialization(CVE- 2018-19362) jackson-databind:默认输入错误处理导致执行远程代码(CVE-2019-14379) jackson-databind:com.pastdev.httpcomponents.configuration.JndiConfiguration 的序列化 gadget 和输入之间的交互 Jackson-databind:错误处理与 org.apache.commons.dbcp2.datasources.SharedPoolDataSource(CVE-2020-35491)相关的序 列化 gadget 和输入之间的交互 Jackson-databind:错误处理与 com.oracle.wls.shaded.org.apache.xalan lib.sql.JNDIConnectionPool(CVE-2020-35728) Jackson-databind:错误处理与 OpenShift Container Platform 4.7 日志 日志记录 记录 16 Jackson-databind:错误处理与 oadd.org.apache.commons.dbcp.cpdsadapter.DriverAdapterCPDS(CVE-2020-36179)0 码力 | 183 页 | 1.98 MB | 1 年前3
共 171 条
- 1
- 2
- 3
- 4
- 5
- 6
- 18