2019年10月17日: Go生态洞察:在Go 1.13中处理错误


🌷🍁 博主猫头虎(🐅🐾)带您 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包中包括两个新函数:IsAserrors.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生态,共同成长。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/224790.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenVINO异步Stable Diffusion推理优化方案

文章目录 Stable Diffusion 推理优化背景技术讲解:异步优化方案思路:异步推理优化原理OpenVINO异步推理Python API同步和异步实现方式对比 oneflow分布式调度优化优势:实现思路 总结: Stable Diffusion 推理优化 背景 2022年&am…

搭建你自己的网盘-个人云存储的终极解决方案-nextcloud AIO(二)

今天接着上篇,我们继续来玩nextcloud AIO. 当我们看到这个页面的时候,则证明AIO已经安装好了,登录账号和密码在图上已经标注了。点击open your nextcloud 即可跳转到我们的域名的登录页。 输入用户名和密码后登录即可。 打开前台页面&#x…

java springboot测试类Transactional解决 测试过程中在数据库留下测试数据问题

好 目前 我们已经完成了表现层对应的测试了 但这里有个坑 如果我们在执行某个声明周期时 包含了测试的过程 它会在数据库中留下一条数据 但真实企业开发 绝对不允许 过一遍留一组数据的 那么 我们的期望就是 执行测试过程 但不要留下任何数据 这是我们的数据库表 然后 这里…

【论文阅读】ActiveNeRF:通过不确定性估计候选新视图

【论文阅读】ActiveNeRF: Learning where to See with Uncertainty Estimation Abstract1 Introduction3 Background4 NeRF with Uncertainty Estimation5 ActiveNeRF5.1 Prior and Posterior Distribution5.2 Acquisition Function5.3 Optimization and Inference 6 Experimen…

Redis多机数据库

文章目录 Redis多机数据库一、主从复制1、旧版复制功能的实现a、同步b、命令传播 2、旧版复制功能的缺陷3、新版复制功能的实现a、部分同步功能b、复制实现步骤 4、心跳检测 二、哨兵1、Sentinel概念2、Sentinel初始化流程3、故障转移过程 三、集群1、几个概念2、集群创建流程a…

使用契约的链上期权合约

我们很高兴地宣布利用比特币契约的力量在链上实施期权合约。 只要该链支持比特币式契约(例如 Bitcoin SV 和 MVC),就可以直接在区块链上执行复杂的金融合约,例如看涨期权和看跌期权。 与通常需要多个中介机构的传统金融平台不同&a…

linux 磁盘管理、分区管理常用命令

文章目录 基础命令挂载新硬盘/分区添加内存交换分区swaplvm分区管理模式 基础命令 查看目录文件大小 du -sh /backup du -sh /backup/* du -sh *查看磁盘挂载信息 df -lhT查看某个目录挂载在哪个分区,以及分区的磁盘使用情况 df [目录] #例如:df /ho…

第三节HarmonyOS DevEco Studio了解基本工程目录

一、工程级目录 工程的目录结构如下。 目录详情如下: AppScope:存放应用全局所需要的资源文件。Entry:应用的主模块,存放HarmonyOS应用的代码、资源等。oh_modules:工程的依赖包,存放工程依赖的源文件。b…

docker-compose部署zabbix+grafana

1.引言 1.1目的 zabbixgrafana实现图形化监控 2.部署环境 服务器ip服务版本192.168.5.137zabbix-server6.0.21192.168.5.137grafana10.2.2192.168.5.152zabbix-client6.0.21 3.部署zabbix-server 3.1 创建zabbix目录 mkdir zabbix3.2 编写docker-compose文件 cd zabbix…

用CHAT总结费曼学习法的关键

问CHAT:费曼学习法的关键 CHAT回复:费曼学习法是由著名物理学家理查德费曼所发明的一种学习方法,旨在以深入理解为目标,帮助自己学习新的知识和技能。 费曼学习法有四个关键步骤: 1. 学习:首先&#xff0…

如何迁移数据到水经微图64位版?

我们在《为什么要升级水经微图到64位?》一文中,为大家分享了升级水经微图到64位的原因。 这里,我们再为大家分享一下在哪些情况下升级需要迁移已标注的数据,以及如何迁移已标注绘制的数据到水经微图64位中。 哪些情况需要迁移数…

vue3中的动态component组件

is属性来指定要渲染的组件(填写组件名&#xff09; 多个子组件通过component标签挂载在同一个父组件中&#xff0c; 可以修改is属性进行动态切换组件。 可以搭配<keep-alive></keep-alive>使用。 父组件代码&#xff1a; <template><div style"fon…