🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁
🦄 博客首页——🐅🐾猫头虎的博客🎐
🐳 《面试题大全专栏》 🦕 文章图文并茂🦖生动形象🐅简单易学!欢迎大家来踩踩~🌺
🌊 《IDEA开发秘籍专栏》 🐾 学会IDEA常用操作,工作效率翻倍~💐
🌊 《100天精通Golang(基础入门篇)》 🐅 学会Golang语言,畅玩云原生,走遍大小厂~💐
🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
☁️🐳
Go语言开发者必备技术栈☸️
:
🐹 GoLang | 🌿 Git | 🐳 Docker | ☸️ Kubernetes | 🔧 CI/CD | ✅ Testing | 💾 SQL/NoSQL | 📡 gRPC | ☁️ Cloud | 📊 Prometheus | 📚 ELK Stack
🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🐅🐾🍁🐥
文章目录
- 🐅🐾猫头虎建议Go程序员必备技术栈一览表📖:
- 2019年10月17日: Go生态洞察:在Go 1.13中处理错误 🐾
- 摘要
- 引言
- 正文
- 🛠️ Go 1.13之前的错误处理
- 🔍 检查错误
- ➕ 添加信息
- 🆕 Go 1.13中的错误处理
- 🌀 Unwrap方法
- 🔍 使用Is和As检查错误
- 🔄 包装错误与%w
- 🤔 是否包装错误
- 📐 自定义错误测试与Is和As方法
- 🔗 错误与包API
- 总结
- 参考资料
- 下一篇预告
- 原创声明
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
2019年10月17日: Go生态洞察:在Go 1.13中处理错误 🐾
摘要
🐯 猫头虎博主来啦!今天我们将深入Go 1.13的错误处理新特性。一起探索如何通过增强的标准库功能,更优雅地处理和检查错误。🔍 准备好一起探索Go的错误处理奥秘了吗?
引言
这篇文章是关于Go 1.13中处理错误的深入解析。Go一直将错误视为值,这种处理方式在过去十年中服务我们良好。尽管标准库对错误的支持较为基础,但新版本为我们带来了一些重要的改进。
正文
🛠️ Go 1.13之前的错误处理
🔍 检查错误
在Go中,错误被视为值。我们通常通过将错误与nil
进行比较来检查操作是否失败。有时,我们还会将错误与已知的哨兵值进行比较。
➕ 添加信息
通常,函数会在向调用栈上传递错误时添加信息。一个简单的方法是构建一个包含前一个错误文本的新错误:
if err != nil {return fmt.Errorf("decompress %v: %v", name, err)
}
🆕 Go 1.13中的错误处理
🌀 Unwrap方法
Go 1.13引入了Unwrap
方法,允许一个错误包含另一个错误。例如,我们可以给QueryError
类型添加一个返回其包含错误的Unwrap
方法:
func (e *QueryError) Unwrap() error { return e.Err }
🔍 使用Is和As检查错误
Go 1.13的errors
包中包括两个新函数:Is
和As
。errors.Is
函数比较一个错误与一个值,而errors.As
函数检查一个错误是否为特定类型。
🔄 包装错误与%w
在Go 1.13中,fmt.Errorf
函数支持一个新的%w
动词。当这个动词出现时,fmt.Errorf
返回的错误将有一个Unwrap
方法返回%w
的参数。
🤔 是否包装错误
决定是否包装原始错误取决于新错误创建的上下文。包装一个错误是为了将其暴露给调用者。不包装错误则意味着不暴露实现细节。
📐 自定义错误测试与Is和As方法
errors.Is
函数检查链中的每个错误是否与目标值匹配。此外,链中的错误可以通过实现Is
方法来声明它与目标匹配。
🔗 错误与包API
返回错误的包应描述程序员可以依赖的那些错误属性。良好设计的包还会避免返回不应依赖的属性错误。
总结
尽管我们讨论的改变只是三个函数和一个格式化动词,但我们希望它们将大大改善Go程序中的错误处理方式。我们期待包装提供额外上下文将成为常态,帮助程序做出更好的决策,帮助程序员更快地发现错误。
参考资料
- Damien Neil and Jonathan Amsterdam, “Working with Errors in Go 1.13”, 2019年10月17日.
- Go官方博客
下一篇预告
🔜 下一篇文章将探索Go Modules: v2 and Beyond。猫头虎将带你了解Go模块系统中的高级特性和最佳实践。敬请期待! 🌟
原创声明
======= ·
-
原创作者: 猫头虎
-
作者wx: Libin9iOak
-
作者公众号: 猫头虎技术团队
学习 | 复习 | Go生态 |
---|---|---|
✔ | ✔ | ✔ |
本文为原创文章,版权归作者所有。未经许可,禁止转载、复制或引用。
作者保证信息真实可靠,但不对准确性和完整性承担责任。
未经许可,禁止商业用途。
如有疑问或建议,请联系作者。
感谢您的支持与尊重。
点击
下方名片
,加入IT技术核心学习团队。一起探索科技的未来,洞察Go生态,共同成长。