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生态,共同成长。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023.11.26 关于 Spring Boot 单元测试

目录 单元测试 优势 单元测试的使用 具体步骤 实现不污染数据库 阅读下面文章之前 建议点击下方链接了解 MyBatis 的创建与使用 MyBatis 的配置与使用 单元测试 单元测试 指对软件中的最小可测试单元进行检查和验证的过程单元测试 由开发人员在编码阶段完成,…

免费部署开源大模型 ChatGLM-6B

参考:【大模型-第一篇】在阿里云上部署ChatGLM3-CSDN博客 ChatGLM 是一个开源的、支持中英双语的对话语言模型,由智谱 AI 和清华大学 KEG 实验室联合发布,基于 General Language Model (GLM) 架构,具有 62 亿参数。ChatGLM3-6B 更…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑碳排放分摊的综合能源服务商交易策略》

这篇文章的标题表明它将讨论一个关于综合能源服务商交易策略的主题,而在这个策略中,特别考虑了碳排放分摊的因素。以下是对标题中各关键词的解读: 综合能源服务商: 这指的是在能源领域提供多种服务的企业或组织,可能涵…

数据分析工具比较:Excel vs Python vs R

写在开头 在数据分析的世界里,选择合适的工具至关重要。本篇博客将深入比较常用的数据分析工具,包括Excel、Python和R,以帮助读者更好地选择适合自己需求的工具。 1.Excel:经典易用的电子表格 优势: 用户友好: Excel是大多数人熟悉的电子表格工具,使用简单,无需编程…

Mysql——》int(1)和 int(10)区别

推荐链接: 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

【Qt】QStackedWidget、QRadioButton、QPushButton及布局实现程序首页自动展示功能

效果 在程序启动后,有时不会进入到工作页面,会进入到产品展示页面。 动画如下: 首页展示 页面操作 当不点击时,一秒自动刷新一次;当点击时,会自动跳转到对应页面;点击上一页、下一页、及跳转页…

闪亮明眸,遇见森林——四川眼科医院双语会员活动圆满结束

城市里面有什么?城市里面可以探究什么?城市里的科学又藏在什么地方呢?在孩子们的奇思妙想中,四川眼科医院带领屈光、视光的会员大小朋友们,一同开启了“闪亮明眸,遇见森林”的会员研学活动。活动现场,四川眼科医院屈光科医生张…

Spring Cloud+Nacos 注册中心详解及开发示例

目录 一、Nacos 的关键特性包括: 二、逻辑架构及其组件介绍 三、Nacos安装 1、版本选择 2、预备环境准备 3、下载源码或者安装包 4、启动服务器 5、关闭服务器 四、如何引入 Nacos Discovery Starter 五、启动一个 Provider 应用 1 pom.xml的配置。一个完整的 pom.xm…

4.3-Linux网络命名空间

查看本机的netWork namespace ip netns list 删除netWork namespace ip netns delete netnsName 创建netWork namespace ip netns add test1 查看test1这个netWork namespace的ip信息: ip netns exec test1 ip a 可以在虚拟机上执行:ip link 同样&#…

C++学习之路(九)C++ 用Qt5实现一个工具箱(增加一个JSON数据格式化功能)- 示例代码拆分讲解

上篇文章,我们用 Qt5 实现了在小工具箱中添加了《粘贴板记录管理》功能,用着还不错哈。为了继续丰富我们的工具箱,今天我们就再增加一个平时经常用到的功能吧,就是「 JSON数据格式化 」功能。下面我们就来看看如何来规划开发一个这…

国内某知名半导体公司:实现虚拟化环境下的文件跨网安全交换

立足特定应用领域的创新型企业 上海某半导体公司是中国10大集成电路设计公司之一的子公司。该半导体公司是一家特色工艺集成电路芯片制造企业,专注模拟电路、功率器件所需的特色生产工艺研发与制造,。 该半导体公司不断追求创新,提高自身产…

《社交泛娱乐出海作战地图》加印领取啦!

全网都在找的、内容扎实形制精炼的行业首款 融云《社交泛娱乐出海作战地图》 响应需求,惊喜加印啦! 久等的大家点击上图或阅读原文获取吧~ 关注【融云全球互联网通信云】了解更多 发布以来,《地图》两次加印均被抢购一空。 公众号后台、朋友…

rust-flexi_logger

flexi_logger 是字节开源的rust日志库。目前有log4rs、env_log 等库,综合比较下来,还是flexi_logger简单容易上手,而且自定义很方便,以及在效率方面感觉也会高,下篇文章我们来测试下。 下面来看下怎么使用 关注 vx gol…

基于M估计样本一致性算法的点云平面拟合

平面拟合 1、算法简介2、参考文献3、实现效果4、相关代码 1、算法简介 RANSAC 是在给定模型和距离阈值 T T T的情况下,通过寻找最小代价 C C C来确定内点数据并拟合模型。如式(1)所示的代价函数,当点到模型的距离 e e e小于阈值 T…

服务器运行情况及线上排查问题常用命令

一、top命令 指令行: top返回: 返回分为两部分 (一)系统概览,见图知意 以下是几个需要注意的参数 1、load average: 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分…

华为拆分零部件业务,长安入股,赛力斯接洽中

作者 |德新 编辑 |王博 11月26日,长安汽车官宣与华为在智能汽车零部件业务上的投资与合作: 华为拟成立一家新的公司,并将其在智能汽车解决方案业务上的核心技术和资源注入新公司,长安汽车及关联方有意投资该新公司。 参照目前长…

基于Webserver的工业数据采集控制

http协议 http简介 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于Web Browser(浏览器)到Web Server(服务器)进行数据交互的传输协议。 HTTP是应用层协议 HTTP是一个基于…

【日常总结】Swagger 3.0 + 集成 knife4j ,并设置header入参

一、场景 环境: 二、问题 思路 : 三、解决方案 (推荐) Stage 1:接入knife4j 依赖 Stage 2:修改 yaml 配置 Stage 3:修改 swagger 3 配置文件 Stage 4:查看效果 Swagger UI …

Spring源码解读之创建bean

本文章我们会解读一下Spring如何根据beanDefinition创建bean的; 代码入口: AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);applicationContext.refresh(); 当spring执行refresh(…

使用vscode中编写c语言——无法打开 源 文件 “stdlib.h“C/C++(1696)问题

出现这个问题原因如下: 1、没有下载编辑器或者是没有配置好该编辑器的环境变量。 可以通过如下方法检查是否安装并配置好编辑器:打开终端:按winR cmd,然后输入gcc-v,查看是否有mingw64编辑器,如下图是已经…