当前位置: 首页 > news >正文

Go语言基础之Error接口

Go语言基础之Error接口

  • 1.Error 接口
  • 2.创建错误
  • 3.fmt.Errorf

1.Error 接口

Go 语言中把错误当成一种特殊的值来处理,不支持其他语言中使用try/catch捕获异常的方式

Go 语言中使用一个名为 error 接口来表示错误类型

type error interface {Error() string
}

error 接口只包含一个方法——Error,这个函数需要返回一个描述错误信息的字符串。

当一个函数或方法需要返回错误时,我们通常是把错误作为最后一个返回值。例如下面标准库 os 中打开文件的函数。

func Open(name string) (*File, error) {return OpenFile(name, O_RDONLY, 0)
}

由于 error 是一个接口类型,默认零值为nil。所以我们通常将调用函数返回的错误与nil进行比较,以此来判断函数是否返回错误。例如你会经常看到类似下面的错误判断代码

file, err := os.Open("./xx.go")
if err != nil {fmt.Println("打开文件失败,err:", err)return
}

2.创建错误

我们可以根据需求自定义 error,最简单的方式是使用errors 包提供的New函数创建一个错误

我们可以在函数返回时快速创建一个错误:

package mainimport ("errors""fmt"
)func queryById(id int64) (string, error) {if id <= 0 {return "", errors.New("无效的id")}return "可以了", nil
}func main() {s, err := queryById(12)fmt.Println(s, err) // 可以了 <nil>s, err = queryById(-2)fmt.Println(s, err)  //  无效的id
}

或者用来定义一个错误变量,例如标准库io.EOF错误定义如下

var EOF = errors.New("EOF")

3.fmt.Errorf

当我们需要传入格式化的错误描述信息时,使用fmt.Errorf是个更好的选择

fmt.Errorf("查询数据库失败,err:%v", err)

但是上面的方式会丢失原有的错误类型,只拿到错误描述的文本信息。

为了不丢失函数调用的错误链,使用fmt.Errorf时搭配使用特殊的格式化动词%w,可以实现基于已有的错误再包装得到一个新的错误。

fmt.Errorf("查询数据库失败,err:%w", err)
http://www.lryc.cn/news/35661.html

相关文章:

  • Sqoop详解
  • C++ 之指针
  • 数据结构与算法---JS与栈
  • HDLBits: 在线学习 SystemVerilog(二十三)-Problem 158-162(找BUG)
  • 国外SEO升级攻略:如何应对搜索引擎算法变化?
  • X.509证书
  • 高等数学——微分方程
  • JAVA小记-生成PDF文件
  • Noah-MP陆面过程模型建模方法与站点、区域模拟
  • 全国青少年软件编程(Scratch)等级考试一级真题——2019.9
  • 第十四届蓝桥杯三月真题刷题训练——第 6 天
  • 安装MySQL数据库8.0服务实例
  • 数据的存储--->【大小端字节序】(Big Endian)(Little Endian)
  • 软件测试备战近三银四--面试心得
  • 《Linux运维实战:ansible中的变量定义及以及变量的优先级》
  • useEffect 通过 form.getFieldValue(‘xxx‘) 监听 Form表单变化
  • 【晓龙oba出品 - 黑科技解题系列】- 最小操作次数使数组元素相等
  • Activity的启动和结束
  • 利用业务逻辑+OB分布式特性优化SQL
  • 哈希表
  • 基于Halcon的MLP(多层感知神经网络)分类器分类操作实例
  • VR全景博物馆,打造7*24小时的线上参访体验
  • Go 数据类型
  • Mybatis-Plus学透?一篇足够(持续更新中)
  • 船用燃料油市场调研报告-主要企业、市场规模、份额及发展趋势
  • python趣味编程-奥赛罗游戏
  • 经典卷积模型回顾13—ResNetXt实现图像分类(matlab)
  • Spring学习——Maven进阶
  • 第23篇:基础知识-Java Switch Case
  • Go 实现多态和 参数的动态个数及动态类型