美文网首页
golang异常处理

golang异常处理

作者: 代码表演艺术家 | 来源:发表于2020-08-04 22:04 被阅读0次

go语言没有使用像java python等语言的try catch/except 语句来处理异常,而是使用它特有的panic,recover,defer来捕获和处理异常

  • defer 这个关键字修饰的语句不会立即执行,而是在函数执行完成将要退出前执行
  • panic 用来抛出异常,类似于python的raise, 函数执行到这里后不再执行后面的语句,但函数退出前还是会执行defer修饰的语句
  • recover是个内置函数,用来捕获异常,recover必须定义在defer语句后面
    下面来看个例子
package main

import "fmt"

func main() {
    c := divide(1, 0)
    fmt.Println(c)
    fmt.Println("execute completly")
}

func divide(a, b int) int {
    defer func() {
        err := recover()
        if err != nil {
            fmt.Println("error happen!")
            fmt.Println(err)
        } else {
            fmt.Println("all right")
        }
    }() //匿名函数,这里必须要带上()

    if b == 0 {
        panic("divided by zero!!")
    }
    return a / b
}
//输出
error happen!
divided by zero!!
0
execute completly

分析:
divide是一个做除法的函数,可能会出现除数为0的错误,所以在函数一开头就定义了一个defer匿名函数(注意这里的匿名函数定义完后面要带上括号才能执行),这个匿名函数被defer修饰了所以只在divide函数执行完才会执行,而不是一进来就执行。后面判断b是否等于0,如果为零的话我们手动使用panic抛出了异常,这个异常是在divide函数退出前执行的defer匿名函数里通过recover()来捕获的,如果err不为空就说明发生了错误,打印error happen!和panic抛出的divided by zero!! 然后主协程返回到主函数main里,继续执行后面的打印

相关文章

  • goLang异常处理

    defer defer是go提供的一种资源处理的方式。defer的用法遵循3个原则在defer表达式被运算的同时,...

  • golang异常处理

    go语言没有使用像java python等语言的try catch/except 语句来处理异常,而是使用它特有的...

  • Golang异常处理

    Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理。异常和错误是不...

  • golang的异常处理

    go语言是不支持异常的,go语言的设计者认为异常会被不成熟的程序员滥用,导致异常的处理过去复杂;go语言取消异常的...

  • Golang的异常处理

    Golang的异常处理 Golang的优点有很多,以前的文章中也有提到过,但也有很多槽点为Gopher所诟病,尤其...

  • golang笔记——异常处理

    函数返回值处理异常 golang为了避免像写Java一样滥用try catch,可以使用函数多返回值的特性来进行异...

  • Golang的异常处理介绍

  • golang 基础(33)异常处理

    对出初学者往往忽视程序中异常处理,认为程序总是是在一个被百般呵护的环境运行,没有任何风吹雨打,这是因为我们是最了解...

  • 【Golang】并发的异常处理

    go语言的并发实现起来很简单,只需要一个go关键字即可使函数并发,但是捕捉并发方法中的错误就没有那么方便了。本文总...

  • golang-统一异常处理

    在我们意料中的,使用 error, 意料之外的用 panic 异常分为系统异常, 和 业务异常!业务异常是可以抛给...

网友评论

      本文标题:golang异常处理

      本文链接:https://www.haomeiwen.com/subject/nirgrktx.html