zoukankan      html  css  js  c++  java
  • Go-24-异常处理机制

    error 接口

    type error interface(){
          Error() string  
    }

    在Go语言中处理错误的方式通常是将返回的错误与nil进行比较。nil值表示没有发生错误,而非nil值表示出现错误。如果不是nil,需打印输出错误。

    package main
    
    import (
        "errors"
        "fmt"
        "math"
    )
    
    // 异常处理机制 error 接口
    func main() {
        num,err:=Sqrt(-100)
        if err!=nil{
            fmt.Println(err)
        }else{
            fmt.Println(num)
        }
    }
    // 定义平法根,算术运算
    func Sqrt(num float64)(float64,error){
        if num>0 {
            return math.Sqrt(num),nil
        }else {
            return 0,errors.New("负数不可以求算术平方根")
        }
    }

    自定义接口类型:

    step1: 定义一个结构体,表示自定义错误的类型。

    step2:让自定义错误类型实现error接口:Error() string。

    step3:定义一个返回error的函数。根据程序实际功能而定。

    package main
    
    import (
        "fmt"
        "strings"
    )
    
    //step 1:自定义错误结构体
    type MyError struct {
        err string
    }
    // step2:让自定义错误类型实现error接口:Error() string
    func (e MyError) Error() string{
        return e.err
    }
    // step3: 定义一个返回error的方法
    func test(str string) (string,error){
        if strings.EqualFold(str,"err"){
            return "",MyError{"传入的字符串不可以是err"}
        }
        return str,nil
    }
    func main() {
        str,err:=test("err")
        if err!=nil {
            fmt.Println(err)
        }else {
            fmt.Println(str)
        }
    }

    defer函数

    关键字defer用于延迟一个函数或者方法的执行。defer语句只能出现在函数或方法的内部。

    在函数中可以添加多个defer语句。如果有很多调用defer,当函数执行到最后时,这些defer语句会按照逆序执行(报错的时候也会执行),最后该函数返回。

    package main
    
    import "fmt"
    
    //defer 推迟方法的执行
    func main() {
        defer A()
        B()
        defer C()
        fmt.Println("end----------")
    }
    func A()  {
        fmt.Println("A-----------")
    }
    func B()  {
        fmt.Println("B-----------")
    }
    func C(){
        fmt.Println("C-----------")
    }

    延迟函数的参数在执行延迟语句时被执行,而不是在执行实际的函数调用时执行。

    当一个函数有多个延迟调用时,它们被添加到一个堆栈中,并按后进先出(Last In First Out,LIFO)的顺序执行.

    panic和recover机制

    不应通过调用panic()函数来报告普通的错误,而应该只把它作为报告致命错误的一种方式。当某些不应该发生的场景发生时调用panic()

    Go语言为开发者提供了专用于“拦截”运行时panic的内建函数recover()。recover()可以让进入恐慌流程的Goroutine恢复过来并重新获得流程控制权。

    recover() 只在推迟函数种有效。

  • 相关阅读:
    About Spring
    execle导入后 数据 无刷新 显示在 输入页面
    前端小神龟 -- 分页导航栏
    如何在mysql命令窗口获取到程序正在执行的sql语句
    div+css(ul li)实现图片上文字下列表布局
    C#异常之(已有打开的与此 Command 相关联,已有打开的与此命令相关联的 DataReader,必须首先将它关闭。)
    台灣VR內容產業聯盟_技術推廣中心
    2014新的一年到来,祝大家新年快乐
    matlab 提取文件路径名称,用于实现遍历读取文件(我的目的是遍历图像)
    无监督学习一些算法的简要概括(一)-稀疏自编码
  • 原文地址:https://www.cnblogs.com/shix0909/p/12992176.html
Copyright © 2011-2022 走看看