7.2 Go 使用error类型


在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~

  • 专栏导航

    • Python系列: Python面试题合集,剑指大厂
    • Git系列: Git操作技巧
    • GO系列: 记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列: 总结好用的命令,高效开发
    • 算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维

    非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

    💖The Start💖点点关注,收藏不迷路💖

    📒文章目录

      • 理解 Error 类型
      • 错误处理的最佳实践
        • 检查错误
        • 错误变量命名
        • 错误日志记录
        • 错误传播
        • 使用内置的错误函数
        • 错误封装
      • 错误类型断言
      • 错误链
      • 错误包装
      • 错误处理模式
        • 检查-然后-执行模式
        • 函数返回模式
        • 错误聚合
      • 总结


内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
在 Go 语言中,错误处理是程序开发中不可或缺的一部分。Go 语言通过其独特的 error 类型,提供了一种简洁而强大的错误处理机制。

理解 Error 类型

Go 中的 error 是一个内置的接口类型,它定义了一个名为 Error() 的方法,该方法返回一个描述错误的字符串。Go 标准库中的许多函数都会返回一个 error 值,如果函数执行成功,error 值为 nil;如果发生错误,则 error 值不为 nil

type error interface {
    Error() string
}

错误处理的最佳实践

检查错误

在 Go 中,处理错误的第一个原则是:总是检查错误。任何可能返回错误的方法调用后,都应该立即检查错误值是否为 nil

f, err := os.Open("filename.txt")
if err != nil {
    log.Fatal(err)
}

错误变量命名

在函数中,通常将错误变量命名为 err。这是一个约定俗成的命名方式,有助于代码的可读性。

错误日志记录

在检查错误后,记录错误信息是一个好的实践。可以使用标准库中的 log 包来记录错误。

if err := someFunction(); err != nil {
    log.Printf("error: %v", err)
}

错误传播

在 Go 中,函数通常通过返回值来传播错误。调用者需要检查返回的错误并相应地处理。

func someFunction() error {
    // ... some code ...
    return errors.New("some error occurred")
}

func main() {
    if err := someFunction(); err != nil {
        log.Fatal(err)
    }
}

使用内置的错误函数

Go 的 errors 包提供了一些内置函数,如 NewAs,它们可以帮助创建和转换错误。

err := errors.New("custom error message")

错误封装

在某些情况下,你可能需要封装一个错误,以便提供更多的上下文信息。这可以通过实现自定义错误类型来实现。

type customError struct {
    msg string
}

func (e *customError) Error() string {
    return e.msg
}

func newCustomError(msg string) error {
    return &customError{msg: msg}
}

错误类型断言

在处理错误时,有时需要对错误类型进行断言,以获取更多信息或进行特定的错误处理。

var err error = someFunction()

if err, ok := err.(*MyCustomError); ok {
    // handle custom error
}

错误链

在复杂的函数调用链中,错误可能会从一个函数传递到另一个函数。使用 fmt.Errorf 可以创建一个新的错误,并包含原始错误作为原因。

err := fmt.Errorf("failed to do something: %w", originalError)

错误包装

错误包装是创建具有额外上下文信息的新错误的一种方式。pkg/errors 包提供了一个 Wrap 函数,它允许你添加更多的上下文信息。

err := pkgerrors.Wrap(originalError, "additional context")

错误处理模式

检查-然后-执行模式

这是最基本的错误处理模式,首先检查错误,然后执行操作。

if err := checkSomething(); err != nil {
    return err
}
doSomething()

函数返回模式

在这种模式中,函数返回一个错误,调用者负责处理错误。

func doSomething() error {
    // ... do something ...
    return nil
}

if err := doSomething(); err != nil {
    // handle error
}

错误聚合

当一个函数需要执行多个可能失败的操作时,可以使用 multierror 包来聚合错误。

var result error = multierror.Append(err1, err2)

总结

Go 的 error 类型提供了一种简单而强大的错误处理机制。通过遵循最佳实践,使用内置的错误函数,封装和断言错误类型,以及采用适当的错误处理模式,开发者可以编写出更加健壮和易于维护的代码。记住,错误处理不仅仅是代码的一部分,它也是程序设计哲学的一部分,需要被认真对待。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

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

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

相关文章

godot.bk

1.搜索godot国内镜像,直接安装,mono是csharp版本 2.直接解压,50m,无需安装,直接运行 3.godot里分为场景,节点 主场景用control场景,下面挂textureact放背景图片,右键实例化子场景把…

自然语言处理(NLP)—— 置信度(Confidence)

1. 置信度(Confidence)的概念 置信度(Confidence)在机器学习和统计中通常指一个模型对其做出的预测是正确的确信程度。在分类任务中,置信度通常由模型赋予特定类别的概率值来表示。例如,在文本分类或实体识…

外界访问docker服务失败

各位i大佬请问一下:我容器起了,但是外网访问不了目标机器的9090端口。 我检查了:1.本机的防火墙已关闭, 2.目标机器的9090端口显示正在被docker监听。 3.外网可以访问目标机器。 4.docker日志,未显示服务报错。 5…

07.与jenkins集成实现cicd

7.与jenkins集成实现ci/cd ip地址服务内存192.168.111.11kube-apiserver 80801G192.168.111.13k8s-node22G192.168.111.14jenkins(tomcat jdk) 8080 kubelet docker1G192.168.111.15gitlab 8080,80 docker2G 通过jenkins一键操作实现发布服务,jenkins对接k8s …

【前缀和】42. 接雨水

本文涉及知识点 C算法:前缀和、前缀乘积、前缀异或的原理、源码及测试用例 包括课程视频 LeetCode42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入&am…

【PPT】根据字体大小自动缩放文本框大小

【PPT】根据字体大小自动缩放文本框大小 一般我们新建文本框输入文字后,文本框的大小是不会自动缩放的,是根据你一开始拖动的尺寸固定的 你可以设置文本框的长度随着文字的变化而自动调整。这样,无论你输入多少文字,文本框都会自…

FFmpeg开发笔记(三十三)分析ZLMediaKit对H.264流的插帧操作

《FFmpeg开发实战:从零基础到短视频上线》一书的“3.4.3 把原始的H264文件封装为MP4格式”介绍了如何把H.264裸流封装为MP4文件。那么在网络上传输的H.264裸流是怎样被接收端获取视频格式的呢?前文指出H.264流必定以“SPS帧→PPS帧→IDR帧”开头&#x…

深入JVM:全面解析GC调优

文章目录 深入JVM:全面解析GC调优一、序言二、GC调优指标三、GC在线监控1、Jstat工具2、VisualVM工具 四、GC日志分析1、收集GC日志2、GCViewer工具3、GCeasy工具 五、GC问题调优1、调整JVM内存大小(1)调整堆内存大小及比例(2&…

ChatGPT-4o 有何特别之处?

文章目录 多模态输入,多模态输出之前的模型和现在模型对比 大家已经知道,OpenAI 在 GPT-4 发布一年多后终于推出了一个新模型。它仍然是 GPT-4 的一个变体,但具有前所未见的多模态功能。 有趣的是,它包括实时视频处理等强大功能&…

疫情物资捐赠和分配系统的设计

管理员账户功能包括:系统首页,个人中心,管理员管理,机构管理,用户管理,发放管理,物资管理 前台账户功能包括:系统首页,个人中心,物资论坛,公告信息…

7.1 Go 错误的概念

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Python:由b站临时短链接获取到永久链接(去除分享中的杂项)

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️如遇文章付费,可先看…

LabVIEW在高校电力电子实验中的应用

概述:本文介绍了如何利用LabVIEW优化高校电力电子实验,通过图形化编程实现参数调节、实时数据监控与存储,并与Simulink联动,提高实验效率和数据处理能力。 需求背景高校实验室在进行电机拖动和电力电子实验时,通常使用…

MongoDB CRUD操作:插入文档

MongoDB CRUD操作:插入文档 文章目录 MongoDB CRUD操作:插入文档使用MongoDB Atlas UI插入文档插入单个文档插入多个文档插入行为自动创建集合_id字段原子性写确认 在MongoDB中插入文档的集中方式: 使用编程语言提供的驱动程序,在…

Table表格组件不请求接口,实现表格里某条数据的本地编辑功能(Vue3+ArcoDesign)

【背景】 在 Vue3 ArcoDesign项目中,使用ArcoDesign-Table表格组件不请求接口,实现表格里某条数据的本地编辑功能。最后统一通过接口发送数据。 【步骤】 1. 在表格每条数据列后添加一个“编辑”按钮,点击该按钮弹出一个对话框&#xff0c…

flink 作业报日志类冲突的解决方案

文章目录 背景思考初步解决方案深入思考下终极解决方案总结 背景 实时作业在页面提交任务后,报NoSuchMethodException 方法,看了下是关于log4j的,首先是作业升级了很多依赖的版本,其次flink 也升级 到了1.19版本 思考 打的Jar有…

计算一个3x3矩阵对角线和其它两条线的元素之和

计算一个3x3矩阵对角线和其它两条线的元素之和 #include <stdio.h> int main () { int d0,b0,s,i,j; int a[3][3]{1,2,3,4,5,6,7,8,9}; for(i0,j2;i<3;i,j--) dda[i][i]a[i][j]; for(i0,j0;i<3;) {bba[i][j]a[i][j2]; ii2;} sdb; printf("d%d\nb%d\ns%d\n&qu…

远程继电器模块实现(nodemcu D1 + 继电器)

前言 接下来将实现一个远程继电器&#xff0c;实时远程控制和查询的开关状态。用 5v 直流电控制 220v 交流电。 硬件上&#xff1a; 使用 nodemcu D1 和 JQC-3FF-S-Z 继电器。 软件上&#xff1a; 使用 nodejs 作为服务端&#xff0c;和 html 作为客户端。 在开始之前在电脑…

数模混合芯片设计中的修调技术是什么?

一、修调目的 数模混合芯片需要修调技术主要是因为以下几个原因&#xff1a; 工艺偏差&#xff08;Process Variations&#xff09;&#xff1a; 半导体制造过程中存在不可避免的工艺偏差&#xff0c;如晶体管尺寸、阈值电压、电阻和电容值等&#xff0c;这些参数的实际值与…

2024年海南省三支一扶报名指南,照片要求

2024年海南省三支一扶报名指南&#xff0c;照片要求 一、考试时间安排&#xff1a; 报名时间&#xff1a;6月1日8:00至6月7日18:00 准考证打印时间&#xff1a;6月17日8:00 考试时间&#xff1a;6月22日 二、招聘人数 海南省计划招募390名高校毕业生