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.mzph.cn/news/177182.shtml

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

相关文章

Mysql数据库多表数据查询问题

1、背景 线上某个业务数据分表存储在10个子表中,现在需要快速按照条件(比如时间范围)筛选出所有的数据,主要是想做一个可视化的数据查询工具,给产研团队使用。 2、实践 注意:不要在线上真实数据库操作&am…

用户选择PowerFlex的十大理由

既有高性能      满足AI、VDI、数据库等工作负载      又有开放架构      4个节点起步可扩展至上千节点      支撑起不断变化的新兴应用负载      还能与云互通      实现云上云下互联      Dell PowerFlex      连续八季度销量增长      …

提升企业文档处理效率,尽在Readiris PDF Corporate下载

在现代企业中,大量的文档处理工作是不可避免的。然而,传统的文档处理方法往往效率低下,浪费了企业宝贵的时间和资源。为了帮助企业提升文档处理效率,我们推荐使用Readiris PDF Corporate软件。 Readiris PDF Corporate是一款功能…

HarmonyOS 应用模型开发指南介绍

一、基本概念解析 新版文档中的知识点,介绍更全面,逻辑更清晰,提供了各类基本概念解析,帮助开发者更快学习、掌握系统能力。以下是新版文档部分概念展示。 1、HAP是什么? 开发者通过DevEco Studio把应用程序编译为一…

企企通相继出席首届百家新锐企业融通创新交流会与采购数字化创新沙龙,持续深化数字赋能

近期,企企通受邀分别参加了广州、上海业界重磅活动,针对新形势下企业数字化采购升级的新技术与新思路、产业链上下游协同发展等进行探讨,赋能数字化信息技术产业生态发展,并对各方主体如何协作共赢助推企业数字化发展建言献策。 0…

AMP State Evolution的计算:以伯努利先验为例

AMP State Evolution (SE)的计算 t 1 t1 t1时, E ( t ) E [ X 2 ] \mathcal E^{(t)} \mathbb E [X^2] E(t)E[X2],SE的迭代式为 τ r ( t ) σ 2 1 δ E ( t ) E ( t 1 ) E ∣ η ( t ) ( X Z ) − X ∣ 2 , Z ∼ N ( 0 , τ r ( t ) ) \begin{a…

JVM运行时数据区域、对象内存分配、内存溢出异常总结

深入理解java虚拟机第二章 二、运行时数据区域2.2.1 程序计数器2.2.2 Java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存 三、HotSpot虚拟机对象解密2.3.1 对象的创建对象如何分配内存?对象的创建如何处理并发问题&#xff1f…

vue3父子组件通过$parent与ref通信

父组件 <template><div><h1>ref与$parents父子组件通信 {{ parentMoney }}</h1><button click"handler">点击我子组件的值会减20</button><hr><child ref"children"></child></div> </te…

深度学习之图像分类(十五)DINAT: Dilated Neighborhood Attention Transformer详解(一)

Dilated Neighborhood Attention Transformer Abstract Transformers 迅速成为跨模态、领域和任务中应用最广泛的深度学习架构之一。在视觉领域&#xff0c;除了对普通Transformer的持续努力外&#xff0c;分层Transformer也因其性能和易于集成到现有框架中而受到重视。这些模…

GPIO的使用--操作PF09 PF10 PF08实现呼吸灯、跑马灯、警报闪烁灯

先来个呼吸灯演示 呼吸灯 目录 一、GPIO的介绍 1.含义 2.控制原理 3.控制流程 二、LED控制 1.呼吸灯 操作代码 烧录结果 2.蜂鸣器红绿灯交替 操作代码 3.红绿灯交替闪烁 操作代码 一、GPIO的介绍 1.含义 GPIO(general porpose intput output),通用输入输出端口。…

AI超级个体:ChatGPT与AIGC实战指南

目录 前言 一、ChatGPT在日常工作中的应用场景 1. 客户服务与支持 2. 内部沟通与协作 3. 创新与问题解决 二、巧用ChatGPT提升工作效率 1. 自动化工作流程 2. 信息整合与共享 3. 提高决策效率 三、巧用ChatGPT创造价值 1. 优化产品和服务 2. 提高员工满意度和留任率…

Slf4j使用Logback时,Logback如何初始化

前言 Slf4j SLF4J&#xff0c;全称 Simple Logging Facade for Java&#xff0c;是一个用于Java编程语言的日志系统抽象层。它为多种现有日志框架&#xff08;例如Log4j、java.util.logging等&#xff09;提供了统一的接口, 但自身并不实现日志功能。 SLF4J 允许用户在部署时…

ArkUI 如何将$r(’app.string.xxx‘) 转成string字符串

一、正常引用字符串资源文件内容 在 ArkUI 中&#xff0c;string.json 中的字符串资源正常情况下使用如下方式引用&#xff1a; Entry Component struct LoginPage {build() {Column() {Text($r(app.string.title))}}}二、资源转string类型 上面的代码没问题是因为 Text(con…

如何通过内网穿透实现公网远程ssh连接kali系统

文章目录 1. 启动kali ssh 服务2. kali 安装cpolar 内网穿透3. 配置kali ssh公网地址4. 远程连接5. 固定连接SSH公网地址6. SSH固定地址连接测试 简单几步通过[cpolar 内网穿透](cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站)软件实现ssh远程连接kali 1…

销售流程中如何有效开发客户

在销售的海洋中&#xff0c;如何游刃有余地开发客户是一大关键。这需要深入了解你的目标客户&#xff0c;制定一份精细的销售计划&#xff0c;选择最合适的沟通方式&#xff0c;建立信任和信誉&#xff0c;并持续不断地跟进。 每一个潜在的客户都是一颗璀璨的星辰&#xff0c;…

【密码学引论】Hash密码

第六章 Hash密码 md4、md5、sha系列、SM3 定义&#xff1a;将任意长度的消息映射成固定长度消息的函数功能&#xff1a;确保数据的真实性和完整性&#xff0c;主要用于认证和数字签名Hash函数的安全性&#xff1a;单向性、抗若碰撞性、抗强碰撞性生日攻击&#xff1a;对于生日…

Ubuntu 设置Nginx开机自启

1.建立自启动服务文件 vim /usr/lib/systemd/system/nginx.service Descriptionnginx - high performance web server Afternetwork.target remote-fs.target nss-lookup.target [Service] Typeforking ExecStart/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx…

【libGDX】Mesh立方体贴图(6张图)

1 前言 本文通过一个立方体贴图的例子&#xff0c;讲解三维纹理贴图的应用&#xff0c;案例中使用 6 张不同的图片给立方体贴图&#xff0c;图片如下。 读者如果对 libGDX 不太熟悉&#xff0c;请回顾以下内容。 使用Mesh绘制三角形使用Mesh绘制矩形使用Mesh绘制圆形使用Mesh绘…

Current request is not a multipart request问题排查

概述 在应用工程里看到如下被标记为deprecated的代码&#xff0c;这对有代码洁癖的我而言是无法忍受的&#xff1a; row.getCell(10).setCellType(Cell.CELL_TYPE_STRING); String hospital row.getCell(0).getStringCellValue();对应的poi版本号&#xff1f;是的&#xff…

MySQL安装与配置教程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…