19 | 错误处理(上)
19 | 错误处理(上)
讲述:黄洲君
时长09:30大小3.27M
问题解析
总结
思考题
赞 15
提建议
精选留言(22)
- zs阿帅2018-09-24go2设计草案里提到说对于这种error处理的多个卫术语句的简化,利用check,handler简化错误处理的代码量。共 1 条评论20
- CcczzZ2020-01-09之前要模板化的方式生成错误信息,都会用 errors.New() + fmt.Sprintf() 的组合去生成错误信息, errors.New(fmt.Sprintf())。 看完文章之后发现还有 fmt.Errorf函数 可直接模版话方式生成错误信息,方便不少,开心😄之前的方式真是不太优雅12
- Felix2020-04-07老师,我一直想知道关于io.EOF怎么理解,拿文件来说如果文件读取结束后,为什么是EOF结束,或者说到底什么是EOF.
作者回复: EOF 就是 End Of File 的缩写。早在 Unix 操作系统诞生之初就有 EOF 这种形式了,它最早象征着文件中内容的结束。由于一些原因,它被很多操作系统和编程语言沿用了。现在的 EOF 的用途已经远不止表示文件的末尾了,它在很多地方都表示某种数据流的末尾。
10 - 党2019-07-27打卡 已经看了快2/5了 因为之前学过 只是会用 没有这么深入了解过 这次 很多知识点都有新的认识了7
- 那句诺言2018-10-30老师,“该值的静态类型当然是error,而动态类型则是一个在errors包中的,包级私有的类型*errorString”,静态类型和动态类型该怎么理解呢?
作者回复: 我讲接口的时候讲了啊。
共 2 条评论7 - 胡小涵2021-04-27郝老师您好,抱歉最近刚看到18年关于您近况的文章,想问一下您最近怎么样了?身体还好嘛?祝老师身体健康!平安顺遂!
作者回复: 现在算是稳定了,或者说基本达到了另外一种平衡状态。谢谢关心:)
共 3 条评论6 - benying2019-06-05评论的人很少了,打卡,20190605共 2 条评论5
- 海盗船长2020-11-26go1.13中,errors又新增了3个方法 errors.Unwrap errors.Is errors.As5
- 海盗船长2019-03-15老师你好,在代码中如何优雅地处理错误呀,有没有办法 不需要在每个方法中处理,集中到一个地方处理?
作者回复: 基本上是这样,就拿Web系统来说,一般情况下会在系统的最上层(接收request的那一层)统一处理错误。
5 - Laughing2018-10-06常用到的net和json包中的错误类型有: 1. AddrError 2. SyntaxError 3. MarshalerError4
- A 凡2018-10-24感觉第一遍看的时候,看的不够仔细,所以从头有看到这部分,发现细节性的东西还是有很多需要注意!4
- MClink2021-03-20echo 函数 return 后面的东西呢?
作者回复: 因为那个函数存在有名称的结果声明,所以在该函数开始执行的时候,作为其结果的变量(如 echo 函数中的 response 变量和 err 变量)就已经自动创建好了。因此,这种函数中的 return 就可以不加任何东西,这时返回的就是那几个结果变量(如 response 和 err)的值。
共 2 条评论3 - 罗峰2021-06-06两个err 比较,应该是比较 相应的动态类型以及动态值是不是 完全一样,感觉就是地址的比较把
作者回复: 是的。不过修正下你说的话,是“两个 error 类型值的比较”,不是“两个 err 比较”。
1 - 修罗2020-03-01打卡1
- Geek_as2022-04-19underlyingError函数我还是有点懵逼,多个switch全部都是执行err.Err,那不需要switch直接执行不也可以吗
作者回复: 这里的underlyingError函数的意思是,参数err的类型只要是*os.PathError、*os.LinkError、*os.SyscallError或*exec.Error中的任意一个的话,就返回err内含的(也就是潜在的)那个错误,否则就把参数err原封不动地返回去。函数如其名,它就是要设法拿到原错误的潜在错误。 当然,你也可以把那些用于判断的类型写到一个case里。我这里是为了在文章中清晰展示,所以把它们分开写了。
- Z宇锤锤2022-04-08boundsError越界异常
- Geek_05d6542022-03-03type PathError struct { Op string Path string Err error } func (e *PathError) Error() string { return e.Op + " " + e.Path + ": " + e.Err.Error() }展开
- jxs12112021-12-01判断2个接口类型(比如这里error类型的值)的值是否相等,是否就是判断他们的的实际类型和实际值是否相等,验证一下认为不是这样比较的,不是的话,什么情况下是相等的呢
作者回复: 类型转换之后再比较啊,你可以用类型断言或者 type switch 语句去判断类型。但一般都会有 other(或者说 default)的情况,这需要妥善处理。
共 3 条评论 - 任小龙2021-05-27pkg/errors,学习中。
- LH2019-03-31未知类型的错误真的感觉不太友好
作者回复: 其实只是不太随大流而已。try...catch...finally的方式代码量也少不到哪里去。不过Go 2会有大幅改进的。