iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >GO语言中err接口及defer延迟异常怎么处理
  • 583
分享到

GO语言中err接口及defer延迟异常怎么处理

2023-06-30 03:06:09 583人浏览 安东尼
摘要

这篇“Go语言中err接口及defer延迟异常怎么处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GO语言中err接口及d

这篇“Go语言中err接口及defer延迟异常怎么处理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“GO语言中err接口及defer延迟异常怎么处理”文章吧。

    err接口

    Go语言引入了一个关于错误处理的标准模式,即error接口,它是Go语言内建的接口类型,该接口的定义如下:

    type error interface {    Error() string}

    调用对应接口

    err:=errors.New("this is nORMal err")fmt.Println(err.Error())err2:=fmt.Errorf("this is normal err")fmt.Println(err2)

    案例:除数b为0时

    package mainimport ("errors""fmt")func main() {//接收错误信息和正确信息result,err := test(5,0)//加了判断,如果没有错误err=nilif err!=nil{fmt.Println(err)}else {fmt.Println(result)}}//b为0时抛出异常func test(a,b int) (result int, err error) {  //返回错误信息err = nilif b==0{err =errors.New("b不能为0")}else {result = a/b}return}

    panic函数

    error返回的是一般性的错误,但是panic函数返回的是让程序崩溃的错误。

    一般而言,当panic异常发生时,程序会中断运行。

    所以,我们在实际的开发过程中并不会直接调用panic( )函数,但是当我们编程的程序遇到致命错误时,系统会自动调用该函数来终止整个程序的运行,也就是系统内置了panic函数。

    案例

    package mainimport "fmt"func main() {test1()test2()test3()}func test1()  {fmt.Println("test1")}func test2()  {panic("panic test2")  //程序中断}func test3()  {fmt.Println("test3")}

    结果:

    test1
    panic: panic test2
    goroutine 1 [running]:
    main.test2(...)

    defer延迟

    总结

    关键字 defer⽤于延迟一个函数的执行,调用了,但是没有执行,也会完成参数的传递

    defer fmt.Println("333")defer fmt.Println("222")defer fmt.Println("111")依次输出顺序:111,222,333

    如果一个函数中有多个defer语句,它们会以后进先出的顺序执行。
    注意,defer语句只能出现在函数的内部。

    defer与匿名函数结合使用

    案例1:无参数

    package mainimport "fmt"func main() {a := 10b := 20defer func() {fmt.Println("匿名函数a", a)fmt.Println("匿名函数b", b)}()a = 100b = 200fmt.Println("main函数a", a)fmt.Println("main函数b", b)}

    结果:

    main函数a 100
    main函数b 200
    匿名函数a 100
    匿名函数b 200

    案例二:有参数

    package mainimport "fmt"func main() {a := 10b := 20  //调用了,也传参数了,但是没有执行defer func(a,b int) { //添加参数fmt.Println("匿名函数a", a)fmt.Println("匿名函数b", b)}(a,b)  //传参数a = 100b = 200fmt.Println("main函数a", a)fmt.Println("main函数b", b)}

    结果:

    main函数a 100
    main函数b 200
    匿名函数a 10
    匿名函数b 20

    recover防止程序中断

    运行时panic异常一旦被引发就会导致程序崩溃。这当然不是我们愿意看到的,因为谁也不能保证程序不会发生任何运行时错误。

    Go语言为我们提供了专用于“拦截”运行时panic的内建函数——recover。它可以是当前的程序从运行时panic的状态中恢复并重新获得流程控制权。

    注意:recover只有在defer调用的函数中有效。

    func testA()  {    fmt.Println("testA")}func testB(x int)  {    //设置recover()    //在defer调用的函数中使用recover()    defer func() {        //防止程序崩溃        //recover()        //fmt.Println(recover())//加了一层判断        if err:=recover();err!=nil {            fmt.Println(err)        }    }()  //匿名函数    var a [3]int    a[x] = 999}func testC()  {    fmt.Println("testC")}func main() {    testA()    testB(0)  //发生异常 中断程序    testC()}

    以上就是关于“GO语言中err接口及defer延迟异常怎么处理”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

    --结束END--

    本文标题: GO语言中err接口及defer延迟异常怎么处理

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

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

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

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

    下载Word文档
    猜你喜欢
    • c#文本框只读属性怎么设置
      c# 文本框只读属性的设置 问题:如何设置 C# 文本框的只读属性? 回答: 要设置文本框的只读属性,可以使用 ReadOnly 属性。 详细解释: ReadOnly 属性是一个布尔值属...
      99+
      2024-05-14
      c#
    • 如何使用 Golang ORM 工具与数据库交互?
      使用 gorm orm 工具与数据库交互,可通过以下步骤轻松实现:安装和初始化(1)、定义模型(2)、建立映射(3)、创建记录(4)、读取记录(5)、更新记录(6)、删除记录(7)、事务...
      99+
      2024-05-14
      golang orm mysql git iphone
    • c++中double与float的区别
      c++++ 中 double 与 float 的区别 在 C++ 中,double 和 float 都是浮点数类型,但它们在精度、范围和内存占用方面存在差异。 精度: double:双...
      99+
      2024-05-14
      c++ 内存占用
    • 如何在 Golang 中处理数据库错误?
      在 go 中处理数据库错误的步骤包括:使用专门的 go mysql 驱动程序。实现 error 接口以创建自定义错误。检测错误,记录足够的信息,并基于错误类型执行适当的恢复操作。 如何...
      99+
      2024-05-14
      golang 数据库错误 mysql git 数据丢失
    • c++中int怎么转string
      在 c++ 中将 int 转换为 string 的方法有:使用 to_string() 函数直接转换。使用 stringstream 类。使用 sprintf() 函数。 如何在 C+...
      99+
      2024-05-14
      c++
    • 优化 C++ 服务器架构以提高吞吐量
      优化 c++++ 服务器吞吐量策略:线程池:预先创建线程池,快速响应请求。非阻塞 i/o:在等待 i/o 时执行其他任务,提升吞吐量。http/2:使用二进制协议,支持多路复用和内容压缩...
      99+
      2024-05-14
      优化 服务器架构 c++
    • 使用 C++ 堆分配器管理服务器架构中的内存
      使用 c++++ 堆分配器管理服务器内存可提高性能和稳定性。堆分配器负责分配和释放动态内存,跟踪空闲/已分配内存元数据。在服务器架构中,它用于分配应用程序对象、缓冲区和数据结构。选择堆分...
      99+
      2024-05-14
      c++ 内存管理 并发访问
    • c#怎么获取字符串中的数字
      从 c# 字符串中提取数字的方法有五种:正则表达式、循环和 char.isdigit()、int.tryparse()、string.split() 和 int.parse()、linq...
      99+
      2024-05-14
      git c#
    • C++ 异常处理在服务器架构中的最佳实践
      c++++ 异常处理在服务器架构的最佳实践:定义清晰的异常层次结构,使用自定义异常类型封装相关信息。使用异常安全函数,及时在适当范围内处理异常。提供有意义的错误消息,帮助用户了解错误并采...
      99+
      2024-05-14
      c++ 异常处理
    • c#怎么拼接字符串
      在 c# 中拼接字符串有三种方法:使用加法(+)运算符、string.concat() 方法和 stringbuilder 类。最简单的方法是使用 + 运算符将字符串连接起来,...
      99+
      2024-05-14
      c#
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作