7.1 Go 错误的概念

news2024/11/18 9:05:05

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

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

  • 专栏导航

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

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

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

    📒文章目录

      • Go 语言中的错误处理
        • 错误的概念
        • 错误类型
        • 检查错误
        • 错误传播
      • 错误处理的最佳实践
        • 明确的错误信息
        • 使用标准库中的 error 函数
        • 避免使用 panic 和 recover
        • 错误包装
        • 错误日志记录
      • 错误处理技巧
        • 使用 defer 来处理资源清理
        • 错误断言
        • 错误链
      • 总结


内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容
在软件开发中,错误处理是保证程序健壮性和可靠性的关键环节。Go 语言以其简洁和高效而著称,其错误处理机制也体现了这一特点。本文将深入探讨 Go 语言中的错误处理概念,并提供一些实用的使用技巧,旨在帮助中高级开发者更好地理解和运用 Go 的错误处理机制。

Go 语言中的错误处理

错误的概念

在 Go 中,错误是通过返回值来传递的。与某些语言使用异常机制不同,Go 使用显式的多返回值模式,其中第一个返回值通常是函数执行的结果,而第二个返回值则是一个错误对象。这种设计使得错误处理成为 Go 程序中不可或缺的一部分。

错误类型

Go 中的错误类型是 error,这是一个内建的接口类型,其定义如下:

type error interface {
    Error() string
}

这意味着任何实现了 Error() string 方法的类型都可以作为错误类型使用。Go 标准库中的错误类型通常是通过 fmt.Errorf 函数创建的,该函数允许开发者构造包含错误信息的自定义错误。

检查错误

在 Go 中,检查错误是开发者的责任。开发者需要在每次函数调用后检查返回的错误,并根据错误类型做出相应的处理。例如:

result, err := SomeFunction()
if err != nil {
    // 处理错误
}

错误传播

在函数中,如果发生了错误,通常的做法是将错误传递给调用者,而不是在函数内部处理。这样做可以使得错误处理更加灵活,调用者可以根据上下文来决定如何处理错误。

错误处理的最佳实践

明确的错误信息

提供明确和有用的错误信息是错误处理的重要部分。错误信息应该能够清楚地描述发生了什么错误,以及可能的原因和解决方案。

使用标准库中的 error 函数

Go 的标准库提供了一些处理错误的函数,如 errors.Newfmt.Errorf。使用这些函数可以方便地创建错误。

避免使用 panic 和 recover

虽然 Go 提供了 panic 和 recover 机制来处理运行时错误,但它们并不是错误处理的首选方式。它们更适合处理不可恢复的错误,而不是常规的错误处理。

错误包装

在某些情况下,你可能需要在捕获一个错误后,添加一些额外的信息,然后重新抛出。Go 1.13 引入了 errors.Iserrors.As 函数,它们可以帮助你识别和包装错误。

错误日志记录

记录错误日志是跟踪和诊断问题的重要手段。确保在处理错误时记录足够的信息,以便事后分析。

错误处理技巧

使用 defer 来处理资源清理

Go 中的 defer 关键字可以用来确保资源的正确释放,即使在发生错误时也不例外。例如,关闭文件或网络连接:

f, err := os.Open("file.txt")
if err != nil {
    return err
}
defer f.Close()

// 使用文件

错误断言

在测试或开发过程中,有时你可能需要断言某个操作没有产生错误。使用 assert 包中的 NoError 函数可以简化这一过程:

assert.NoError(t, err, "Expected no error, but got %s", err)

错误链

在复杂的函数调用链中,错误可能会在多个层级上被传递和处理。使用 fmt.Errorf 可以创建包含调用栈信息的错误,这有助于调试。

总结

错误处理是 Go 程序开发中的一个重要方面。通过理解 Go 的错误处理机制,并遵循最佳实践,开发者可以编写出更加健壮和易于维护的代码。记住,错误是程序运行中不可避免的一部分,正确地处理它们是确保程序质量和用户体验的关键。


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

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

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

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

相关文章

富士摄像机X-H2S MOV格式化后重新写入后的恢复方法

X-H2S是富士数码的一款旗舰机型,支持4K/6K高清,视频编码为最新的HVC。下面我们来看下富士数码摄像机恢复案例。 故障存储:512G存储卡 Exfat文件系统 故障现象: 512G的卡误格式化后又进行了拍摄,卡使用了120G不到的空间,其它底…

深入分析 Android Service (五)

文章目录 深入分析 Android Service (五)1. 深入分析 Service 与 Activity 之间的通信2. Messenger 的内部工作原理2.1 服务端实现2.2 客户端实现 3. AIDL 的内部工作原理3.1 定义 AIDL 接口3.2 服务端实现3.3 客户端实现 4. Service 的优化建议和最佳实践4.1 异步操作4.2 资源…

Vite项目构建chrome extension,实现多入口

本项目使用Vite5 Vue3进行构建。 要使用vite工程构建浏览器插件,无非就是要实现popup页面和options页面。这就需要在项目中用到多入口打包(生成多个html文件)。 实现思路: 通过配置vite工程,使得项目打包后有两个h…

每天学点小知识:WSL安装Ubuntu 22.04 LTS

前言 本章教会你在不使用虚拟机下使用linux,但是这里建议还是使用虚拟机,或者装一双系统,wsl使用linux还是有很多问题的。 1. 简介WSL WSL(Windows Subsystem for Linux)是微软为Windows 10及以上版本开发的一项功能…

如何在IDEA中实现类似Linux命令那样的外部传参

【背景说明】 IDEA中执行一个程序时,如何就在程序一开始执行给传入你给的参数呢? 【说明】 public static void main(String[] args) throws Exception {} 说明:其实java中main方法里的args这个参数,就是用于接收外部传参的。…

注意力机制详解

引言 在阅读一篇文章时,我们的大脑并不平等地处理每一个字词,而是根据上下文自动筛选出核心信息进行深入理解。注意力机制正是借鉴了这一生物学灵感,使得机器学习模型能够动态地分配其“注意力”资源,针对不同的输入部分赋予不同…

R语言ggplot2包绘制网络地图

重要提示&#xff1a;数据和代码获取&#xff1a;请查看主页个人信息&#xff01;&#xff01;&#xff01; 载入R包 rm(listls()) pacman::p_load(tidyverse,assertthat,igraph,purrr,ggraph,ggmap) 网络节点和边数据 nodes <- read.csv(nodes.csv, row.names 1) edges…

6个PPT素材模板网站,免费!

免费PPT素材模板下载&#xff0c;就上这6个网站&#xff0c;建议收藏&#xff01; 1、菜鸟图库 ppt模板免费下载|ppt背景图片 - 菜鸟图库 菜鸟图库是一个设计、办公、媒体等素材非常齐全的网站&#xff0c;站内有几百万的素材&#xff0c;其中PPT模板就有几十万个&#xff0c;…

Java——变量

一、变量介绍 变量就是申请内存来存储值。也就是说&#xff0c;当创建变量的时候&#xff0c;需要在内存中申请空间。内存管理系统根据变量的类型为变量分配存储空间&#xff0c;分配的空间只能用来储存该类型数据。 1、变量声明和初始化 变量的声明&#xff1a; int a; i…

05.k8s弹性伸缩

5.k8s弹性伸缩 k8s弹性伸缩,需要附加插件heapster监控 弹性伸缩&#xff1a;随着业务访问量的大小&#xff0c;k8s系统中的pod比较弹性&#xff0c;会自动增加或者减少pod数量&#xff1b; 5.1 安装heapster监控 1:上传并导入镜像,打标签 ls *.tar.gz for n in ls *.tar.gz…

Github 2024-06-01 开源项目日报Top10

根据Github Trendings的统计,今日(2024-06-01统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目5Jupyter Notebook项目2TypeScript项目1Go项目1Shell项目1Lua项目1Kong:云原生API网关与AI能力 创建周期:3482 天开发语言:Lua协议…

C# 字节数组(byte[])拼接的性能对比测试

将C#中的三种字节数组拼接方式的性能做了一个对比测试&#xff0c;DEMO程序代码如下&#xff1a; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading.Tasks;namespace Byte数组拼接测…

秋招突击——算法打卡——5/30——复习{最大上升子序列的和、面试算法缺陷补充}——新做:{回文数+补充 自定义Stoi实现、正则表达式匹配}

文章目录 复习导弹拦截——最大上升子序列和推理过程实现代码补充昨日面试 新作回文数实现代码 字符串转整数正则表达式匹配个人实现思路分析实现代码如下 参考做法思路分析实现代码 总结 复习 导弹拦截——最大上升子序列和 同样类型题目链接&#xff1a;导弹拦截重做这道题…

docker 启动关闭,设置仓库地址

1. 配置/etc/docker/daemon.json cat /etc/docker/daemon.json# 内容 {"registry-mirrors": ["https://0nth4654.mirror.aliyuncs.com"],"insecure-registries": ["harbor.domain.io"] }2. 配置systemd启动文件 和方法1配置会有冲突&a…

HarmonyOS鸿蒙学习笔记(25)相对布局 RelativeContainer详细说明

RelativeContainer 简介 前言核心概念官方实例官方实例改造蓝色方块改造center 属性说明参考资料 前言 RelativeContainer是鸿蒙的相对布局组件&#xff0c;它的布局很灵活&#xff0c;可以很方便的控制各个子UI 组件的相对位置&#xff0c;其布局理念有点类似于android的约束…

摄影后期照片编辑工具:LrC2024 for Mac/win 中文激活版

LrC2024&#xff08;Lightroom Classic 2024&#xff09;是 Adobe 公司推出的一款专业级别的照片编辑和管理软件。它是 Lightroom Classic CC 的升级版&#xff0c;具有更多的功能和改进。 这款软件主要用于数字摄影师和摄影爱好者处理、编辑和管理他们的照片。它提供了一套强大…

【WEEK14】 【DAY4】Swagger第二部分【中文版】

2024.5.30 Thursday 接上文【WEEK14】 【DAY3】Swagger第一部分【中文版】 目录 16.4.配置扫描接口16.4.1.修改SwaggerConfig.java16.4.1.1.使用.basePackage()方法指定扫描的包路径16.4.1.2.其他扫描方式均可在RequestHandlerSelectors.class中查看源码 16.4.2.仍然是修改Swag…

java读取文件内容(正则表达式匹配)

已知文件score.txt内容如下&#xff1a; 语文85分&#xff0c;数学89分&#xff0c;英语75分&#xff0c;马列95分。 要求解析出其中的成绩数据&#xff0c;并计算总成绩 import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import jav…

vector的功能讲解与底层实现

本文主要介绍vector的内容以及使用和模拟实现。 vector在英文翻译中是矢量的意思&#xff0c;但在c中他的本质是一个顺序表&#xff08;容器&#xff09;&#xff0c;是一个类模板&#xff0c;&#xff08;用模板创建变量就要参考我们之前的实例化内容了&#xff09;用可以改变…

云硬盘的基准性能测试场景

参考来源&#xff1a; 深入浅出云计算-05 | 云硬盘&#xff1a;云上IO到底给不给力 云硬盘的性能等级 当下的云硬盘经过了多次的软硬件迭代&#xff0c;尤其是SSD的迅速发展&#xff0c;吞吐量和随机读写能力等各项性能指标都已经不再是问题了。在现代云计算中&#xff0c;已…