广告
返回顶部
首页 > 资讯 > 精选 >Go语言的错误处理方式
  • 262
分享到

Go语言的错误处理方式

2023-06-15 13:06:46 262人浏览 泡泡鱼
摘要

这篇文章主要介绍“Go语言的错误处理方式”,在日常操作中,相信很多人在Go语言的错误处理方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言的错误处理方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧

这篇文章主要介绍“Go语言的错误处理方式”,在日常操作中,相信很多人在Go语言的错误处理方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言的错误处理方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

构造 error

在 go 语言中,有一个预定义的接口:error,该接口自带一个 Error() 方法,调用该方法会返回一个字符串

type error interface {   Error() string }

调用该方法,会返回当前错误的具体结果。一般有下面几种方式生成 error。

  • errors.New()

  • fmt.Errorf()

errors.New()

调用 errors.New() 会返回一个 error 类型的结构体,该结构体内部会实现一个 Error() 方法, 调用该方法返回的结果为调用  errors.New() 方法时传入的内容。

import (  "errors"  "fmt" )  func divide(a, b int) (error, int) {  if b == 0 {     // 被除数为0,则构造一个 error 结构体   return errors.New("被除数不能为0"), 0  }  var result = a / b  return nil, result }  func main() {  var err error // error 类型数据的初始值为 nil,类似于 js 中的 null  var result int   err, result = divide(1, 0)    if err == nil {     // 如果 err 为 nil,说明运行正常     fmt.Println("计算结果", result)   } else {     // 如果 err 不为 nil,说明运行出错     // 调用 error 结构体的 Error 方法,输出错误原因     fmt.Println("计算出错", err.Error())   } }

可以看到,上面的代码中,由于调用 divide 除法方法时,由于传入的被除数为 0。经过判断,会抛出一个由 errors.New 构造的 error  类型的结构体。

我们将调用 error.Error() 方法返回的结果输出到控制台,可以发现其返回的结果,就是传入 New 方法的值。

执行结果如下:

Go语言的错误处理方式

fmt.Errorf()

通过 fmt.Errorf() 方法构造的 error 结构体,与调用 errors.New() 方法的结果类似。不同的是,fmt.Errorf()  方法会进行一次数据的格式化。

func divide(a, b int) (error, int) {  if b == 0 {     // 将参数进行一次格式化,格式化后的字符串放入 error 中   return fmt.Errorf("数据 %d 不合法", b), 0  }  var result = a / b  return nil, result }  err, result := divide(1, 0) fmt.Println("计算出错", err.Error())

执行结果如下:

Go语言的错误处理方式

panic() 与 recover()

panic()

panic() 相当于主动停止程序运行,调用时 panic()  时,需要传入中断原因。调用后,会在控制台输出中断原因,以及中断时的调用堆栈。我们可以改造一下之前的代码:

func divide(a, b int) (error, int) {  if b == 0 {     // 如果程序出错,直接停止运行   panic("被除数不能为0")  }  var result = a / b  return nil, result }  func main() {   err, result := divide(1, 0)   fmt.Println("计算出错", err.Error()) }

在运行到 panic() 处,程序直接中断,并在控制台打印出了中断原因。

Go语言的错误处理方式

panic() 可以理解为,js 程序中的 throw new Error() 的操作。那么,在 go 中有没有办法终止 panic() ,也就是类似于  try-catch 的操作,让程序回到正常的运行逻辑中呢?

recover()

在介绍 recover() 方法之前,还需要介绍一个 go 语言中的另一个关键字:defer。

defer 后的语句会在函数进行 return 操作之前调用,常用于资源释放、错误捕获、日志输出。

func getData(table, sql) {   defer 中断连接()   db := 建立连接(table)   data := db.select(sql)   return data }

defer 后的语句会被存储在一个类似于栈的数据结构内,在函数结束的时候,被定义的语句按顺序出栈,越后面定义的语句越先被调用。

func divide(a, b int) int {   defer fmt.Println("除数为", b)   defer fmt.Println("被除数为", a)    result := a / b   fmt.Println("计算结果为", result)  return result }  divide(10, 2)

上面的代码中,我们在函数开始运行的时候,先通过 defer 定义了两个输出语句,先输出除数,后输出被除数。

Go语言的错误处理方式

实际的运行结果是:

  • 先输出计算结果;

  • 然后输出被除数;

  • 最后输出除数;

这和前面提到的,通过 defer 定义的语句会在函数结束的时候,按照出栈的方式进行执行,先定义的后执行。defer  除了会在函数结束的时候执行,出现异常的的时候也会先走 defer 的逻辑,也就是说,我们在调用了 panic() 方法后,程序中断过程中,也会先将 defer  内的语句运行一遍。

这里我们重新定义之前的 divide 函数,在执行之前加上一个 defer 语句,defer 后面为一个自执行函数,该函数内会调用 recover()  方法。

Go语言的错误处理方式

recover() 方法调用后,会捕获到当前的 panic() 抛出的异常,并进行返回,如果没有异常,则返回 nil。

func divide(a, b int) int {   // 中断之前,调用 defer 后定义的语句  defer func() {   if err := recover(); err != nil {    fmt.Println("捕获错误", err)   }  }()   if b == 0 {     // 函数运行被中断   panic("被除数不能为0")   return 0  }   return a / b }  result := divide(1, 0) fmt.Println("计算结果", result)

上面的代码运行后,我们发现之前调用 panic() 中断的程序被恢复了,而且后面的计算结果也正常进行输出了。

Go语言的错误处理方式

这就有点类似于 try-catch 的逻辑了,只是 recover 需要放在 defer 关键词后的语句中,更像是 catch 和 finally  的结合。

到此,关于“Go语言的错误处理方式”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: Go语言的错误处理方式

本文链接: https://www.lsjlt.com/news/280354.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Go语言的错误处理方式
    这篇文章主要介绍“Go语言的错误处理方式”,在日常操作中,相信很多人在Go语言的错误处理方式问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Go语言的错误处理方式”的疑惑有所帮助!接下来,请跟着小编一起来学习吧...
    99+
    2023-06-15
  • Go语言的错误处理方法有哪些
    这篇文章主要介绍了Go语言的错误处理方法有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Go语言的错误处理方法有哪些文章都会有所收获,下面我们一起来看看吧。与其他语言的快速比较在 Go 中,所有的错误都是值...
    99+
    2023-06-17
  • go语言错误处理的方法有哪些
    Go语言中的错误处理方法有以下几种:1. 返回错误值:函数可以返回一个额外的错误值,通常是一个error类型的值,用于表示函数执行过...
    99+
    2023-08-15
    go语言
  • Go语言中路由的错误处理技巧
    Go语言中路由的错误处理技巧引言:在使用Go语言开发Web应用程序时,路由是一个非常重要的组件。路由的作用是根据请求的URL路径将请求映射到相应的处理程序。然而,在处理请求时,很容易出现错误。本文将介绍一些在Go语言中处理路由错误的技巧,并...
    99+
    2023-12-18
    Go语言 路由 错误处理
  • Go语言中怎么有效处理错误
    今天就跟大家聊聊有关Go语言中怎么有效处理错误,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、简介Go语言受到诟病最多的一项就是其错误处理机制。如...
    99+
    2022-10-19
  • 详解Go语言的错误处理和资源管理
    目录一、defer二、错误处理三、统一错误处理的逻辑四、panic五、recover六、error vs panic七、错误处理综合示例一、defer 1. defer保证在函数结束...
    99+
    2022-11-12
  • go语言规范RESTful API业务错误处理
    目录错误码为什么需要业务错误码错误码功能错误码设计错误码调研业务错误码错误格式错误码实现错误包错误包功能错误包设计错误码及错误包的使用使用示例使用建议使用尽量少的 HTTP 状态码使...
    99+
    2023-03-08
    go RESTful API错误处理 go RESTful API
  • go语言规范RESTful API业务错误处理的方法是什么
    这篇“go语言规范RESTful API业务错误处理的方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“go...
    99+
    2023-07-05
  • Go语言错误处理异常捕获+异常抛出
    目录一、error变量可以做什么1.定义一个error变量2.错误的处理3.做函数返回值4.做函数参数二、模拟异常的捕获与抛出1.defer简介2.使用recover模拟异常的捕获3...
    99+
    2022-11-13
  • Go语言Gin处理响应方式详解
    目录前言1.以字符串方式响应请求2.以json格式响应请求3.以xml格式响应请求4.以文件格式响应请求5.示例总结前言 本文介绍Gin框架处理响应数据,支持以字符串、json、xm...
    99+
    2023-01-07
    go语言 gin go语言gin框架 go语言gin框架面试题
  • Go语言中实现完美错误处理实践分享
    目录1. 错误的基本概念2. 错误类型3. 自定义错误类型4. 错误处理5. errors.Is 和 errors.As6. panic 和 recover6.1 panic 函数6...
    99+
    2023-05-18
    Go语言错误处理分享 Go语言错误处理 Go 错误处理
  • golang 语言中错误处理机制
    与其他主流语言如 Javascript、Java 和 Python 相比,Golang 的错误处理方式可能和这些你熟悉的语言有所不同。所以才有了这个想法根大家聊一聊 golang 的...
    99+
    2022-11-12
  • 深入理解Go语言文档中的log.Panic函数实现错误处理
    Go语言中的log.Panic函数是一种错误处理机制,用于指示程序发生了不可恢复的错误。当Panic函数被调用时,程序会打印错误信息并停止运行。在这篇文章中,我们将深入理解Go语言文档中的log.Panic函数,并提供具体的代码示例来演示其...
    99+
    2023-11-03
    Go语言 错误处理 logPanic
  • GO框架中的自然语言处理:文件处理的新方式?
    自然语言处理(NLP)是人工智能领域中最活跃和最具挑战性的领域之一。在过去的几年中,随着大数据和深度学习技术的不断发展,NLP技术也得到了飞速的发展。在这个领域中,GO框架也逐渐成为了一个备受关注的工具。在本文中,我们将探讨GO框架中的N...
    99+
    2023-08-31
    框架 文件 自然语言处理
  • go语言eof错误指的是什么
    这篇文章主要介绍了go语言eof错误指的是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇go语言eof错误指的是什么文章都会有所收获,下面我们一起来看看吧。在go语言中,eof是指文件结尾错误,是Go语言中...
    99+
    2023-07-05
  • Go语言中如何解决并发请求的错误处理问题?
    Go语言中如何解决并发请求的错误处理问题?在开发并发应用时,我们时常需要发送多个并发请求以提高程序的并发性能。然而,当其中一个请求发生错误时,如何有效地捕获和处理这些错误变得非常重要。Go语言提供了一些技术和模式来解决并发请求的错误处理问题...
    99+
    2023-10-22
    错误处理 关键词:Go语言 并发请求
  • Go语言中如何处理二维码中的错误和异常情况?
    随着智能手机的普及,二维码已经成为了一种非常常见的信息识别方式。而在二维码的生成和识别过程中,难免会出现一些错误和异常情况。本文将介绍在Go语言中如何处理这些错误和异常情况。 一、二维码生成 Go语言中使用第三方库github.com/s...
    99+
    2023-08-15
    二维码 unix 索引
  • Go语言中的For循环常见问题的处理方式
    这篇文章主要讲解了“Go语言中的For循环常见问题的处理方式”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Go语言中的For循环常见问题的处理方式”吧!For循环在我们日常编码中可能用的很多...
    99+
    2023-06-16
  • go语言import报错处理图文详解
    目录import 认识补充:Go语言不支持相对路径import导入包总结import 认识 go的import有两种形式 第一种是GOPATH下项目文件管理 第二种是Go Modul...
    99+
    2023-05-18
    go语言 import go语言import报错 go语言import
  • SpringMVC @ResponseBody 415错误处理方式
    目录以下是我分析的解决步骤方法1、springMVC配置文件开启注解2、添加springMVC需要添加如下配置3、pom.xml添加jackson依赖4、ajax请求要求5、Cont...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作