【go语言】error错误机制及自定义错误返回类型

2023-12-20

简介

Go 语言通过内置的 error 接口来处理错误,该接口定义如下:

type error interface {
    Error() string
}

这意味着任何实现了 Error() 方法的类型都可以作为错误类型。在 Go 中,通常使用 errors 包的 New 函数来创建简单的错误:

package main

import (
	"errors"
	"fmt"
)

func divide(a, b int) (int, error) {
	if b == 0 {
		return 0, errors.New("division by zero")
	}
	return a / b, nil
}

func main() {
	result, err := divide(10, 0)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("Result:", result)
}

自定义错误类型

通过自定义两个错误变量,有利于判断错误类型

通常我们判断是否存在错误而不是判断不存在错误,有利于尽早失败避免嵌套

package main

import (
	"errors"
	"fmt"
)

var DivisionByZero = errors.New("除0错误")
var LessThanZero = errors.New("小于0错误")

func divide(a, b int) (int, error) {
	if b == 0 {
		return 0, DivisionByZero
	}
	if a < 0 {
		return 0, LessThanZero
	}
	return a / b, nil
}

func main() {
	result, err := divide(-1, 10)
	if err != nil {
		fmt.Println("Error:", err)
		return
	}
	fmt.Println("Result:", result)
}

与其他语言不同点

  • 没有异常机制
  • error类型实现了error接口

源码分析看error类型:只需要实现Error方法就满足error接口的要求即为一个错误类

  • 可以通过errors.New()快速创建错误实例

errors包内的一部分,定义了New函数和一个errorString错误类型,用于快速创建和表示简单的错误。

  1. New 函数是一个工厂函数,用于创建一个新的错误。它接受一个字符串参数 text ,该字符串表示错误的文本描述。每次调用 New 都会返回一个新的错误对象,即使传递相同的文本描述,它们也是不同的错误对象。

  2. errorString 类型: errorString 是一个简单的实现了 error 接口的类型,它只有一个字符串字段 s 表示错误的文本描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【go语言】error错误机制及自定义错误返回类型 的相关文章

随机推荐

  • Postman报错提示 Could not get any response怎么解决

    在通过 postman 请求做接口测试的过程中 有时候会遇到一些报错 当遇到这些报错我们不要着急 看着具体哪里报错 然后进行解决 postman报错 经常使用postman的小伙伴们都应该遇到过一些报错 遇到报错的时候我们不要着急 这么这几
  • Elasticsearch——索引数据

    索引可以说是Elasticsearch中非常重要的模块 一个索引可以视作关系数据库中的一张表 本帖将详细介绍与Elasticsearch索引相关的各种功能等 主要内容如下 索引映射 mapping 结构的定义方法 常用的各种字段类型和动态映
  • 【源码】基于SpringBoot+thymeleaf实现的快递之家管理系统

    系统介绍 基于SpringBoot thymeleaf实现的快递之家管理系统是为学校打造的高效的快递管理系统 系统分为管理员 注册用户两类角色 一共是分为三大菜单项 分别是我的物流 个人管理 后台管理 管理员拥有全部菜单 注册用户拥有我的物
  • Pytest自动化测试 - 必知必会的一些插件

    Pytest拥有丰富的插件架构 超过800个以上的外部插件和活跃的社区 在PyPI项目中以 pytest 为标识 本篇将列举github标星超过两百的一些插件进行实战演示 插件库地址 http plugincompat herokuapp
  • Selenium库编写爬虫详细案例

    一 引言 Selenium作为一个强大的自动化测试工具 其在网络爬虫领域也展现出了许多技术优势 首先 Selenium可以模拟浏览器行为 包括点击 填写表单 下拉等操作 使得它能够处理一些其他爬虫工具无法应对的情况 比如需要登录或者页面使用
  • 多任务学习综述

    文章目录 参考 概述 单任务独立学习 多任务学习 MTL 多任务的类型 联合学习 joint learning 对称 自主学习 learning to learn 非对称 非对
  • 《妙趣横生的算法》(C语言实现)- 第6章 数学趣题(二)

    6 1 连续整数固定和问题 找出任意输入的整数n的全部的连续整数固定和 题目分析 至少要找出两个连续整数的固定和 一个整数的话就是本身了呢 那如何确定这些连续整数呢 想明白了 第一个整数设为a 第二个整数是a 1 假设有m个连续整数 那么第
  • POE工业交换机:为工业网络供电的解决方案

    随着工业自动化和智能制造的发展 POE工业交换机 在现代工业网络中发挥着越来越重要的作用 本文将探讨POE工业交换机的工作原理 优势和应用 POE工业交换机的工作原理 POE工业交换机采用 以太网供电 Power over Ethernet
  • 工程结构振弦采集仪的新技术与新方法研究

    工程结构振弦采集仪的新技术与新方法研究 工程结构振弦采集仪的新技术与新方法研究旨在提高采集仪在工程结构振动监测中的性能和可靠性 以下是一些可能的研究方向 1 传感器技术改进 研究新型传感器技术 如光纤传感器 MEMS传感器等 以提高振弦采集
  • 设计与算法:迷宫问题

    描述 定义一个二维数组 int maze 5 5 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 0 0 1 0 它表示一个迷宫 其中的1表示墙壁 0表示可以走的路 只能横着走或竖着走 不能斜着走 要求编
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 百年东芝“瞄准”汽车「芯」机遇

    在汽车 新四化 大变革的驱动下 汽车半导体市场进入需求暴涨的新周期 智能电动汽车所需要的半导体种类和数量正在急剧增加 东芝电子分立器件应用技术部经理成栋表示 东芝电子正在加大汽车半导体市场的布局 从而满足汽车电动化 智能化发展所带来的全新市
  • Java入门:java中单引号和双引号区别

    区别1 java中的 单引号 表示字符 java中的 双引号 是字符串 区别2 单引号 引的数据一般是char类型的 双引号 引的数据 是String类型的 区别3 java中 单引号 里面只能放一个字母或数字或符号 java中的 双引号
  • CloudPulse:一款针对AWS云环境的SSL证书搜索与分析引擎

    关于CloudPulse CloudPulse是一款针对AWS云环境的SSL证书搜索与分析引擎 广大研究人员可以使用该工具简化并增强针对SSL证书数据的检索和分析过程 在网络侦查阶段 我们往往需要收集与目标相关的信息 并为目标创建一个专用文
  • 【华为机试真题 Python】简单的自动曝光、平均像素值

    题目描述 一个图像有n个像素点 存储在一个长度为n的数组img里 每个像素点的取值范围 0 255 的正整数 请你给图像每个像素点值加上一个整数k 可以是负数 得到新图newImg 使得新图newImg的所有像素平均值最接近中位值128 请
  • 一文揭秘人才成长规律,看到就是赚到

    社会不教 精英不讲 看到就是赚到 为啥你比别人挣得少 职场当中 决定你能拿多少钱 并不在于你的学历 也并不在于你的背景 而在于你处于什么位置 你能做什么 你做了什么 你为谁做什么 能做什么 代表的是能力 你做了什么 代表的是方向和业绩 你为
  • 【项目管理】redmine

    Redmine是用Ruby开发的基于web的项目管理软件 是用ROR框架开发的一套跨平台项目管理系统 据说是源于Basecamp的ror版而来 支持多种数据库 有不少自己独特的功能 例如提供wiki 新闻台等 还可以集成其他版本管理系统和B
  • LeetCode:162. 寻找峰值、1901. 寻找峰值 II(二分 C++)

    目录 162 寻找峰值 题目描述 实现代码与解析 二分 原理思路 1901 寻找峰值 II 题目描述 实现代码与解析 二分 原理思路 162 寻找峰值 题目描述 峰值元素是指其值严格大于左右相邻值的元素 给你一个整数数组 nums 找到峰值
  • 计算机组成原理综合1

    1 完整的 计算机系统 应包括 D A 运算器 存储器和控制器 B 外部设备和主机 C 主机和实用程序 D 配套的硬件设备和软件系统 2 计算机系统中的存储器系统是指 D A RAM存储器 B ROM存储器 C 主存储器 D 主存储器和外存
  • 【go语言】error错误机制及自定义错误返回类型

    简介 Go 语言通过内置的 error 接口来处理错误 该接口定义如下 type error interface Error string 这意味着任何实现了 Error 方法的类型都可以作为错误类型 在 Go 中 通常使用 errors