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() 只在推迟函数种有效。

  • 相关阅读:
    ASM ClassReader failed to parse class file
    idea运行java项目js中文乱码如何解决
    Error:(182, 32) java: 常量字符串过长
    ssh启动报错:org.dom4j.DocumentException: Connection timed out: connect Nested exception: Connection timed out: connect
    [Intro to Deep Learning with PyTorch -- L2 -- N14] Sigmoid function
    [CSS3] CSS Selector
    [HTML5] document.activeElement
    [Intro to Deep Learning with PyTorch -- L2 -- N9] Perceptron Trick
    [Javascript] Broadcaster, operator, listener pattern: Write a debounce operator -- 1
    [CSS] place-content = align-items + justify-content
  • 原文地址:https://www.cnblogs.com/shix0909/p/12992176.html
Copyright © 2011-2022 走看看