zoukankan      html  css  js  c++  java
  • 异常处理和错误处理

    defer

    表示延迟调用,即便程序出现严重错误,也会执行

    package main
    
    import "fmt"
    
    func main(){
        defer fmt.Println("我是最后执行1")
        defer fmt.Println("我是最后执行2")  // 先执行2再执行1
        f1()
        f2()
    }
    
    func f1(){
        fmt.Println("f1")
    }
    func f2(){
        fmt.Println("f2")
    }

    panic、recover

    panic就是python的raise(主动抛出异常),recover是恢复程序,继续执行

    package main
    
    import "fmt"
    
    func main() {
        f1()
        f2()
        f3()
    }
    
    func f1()  {
        fmt.Println("f1...")
    }
    
    func f2()  {
        defer func() {
            if a:=recover();a!=nil{
                //a 如果不等于nil,表示程序出了异常,a 就是异常信息
                //a 等于nil,表示没有异常
                fmt.Println("出错了")
            }
    
        }()
        fmt.Println("f2...")
        var a =make([]int,3,3)
        fmt.Println(a[4])
    }
    func f3()  {
    
        fmt.Println("f3...")
    }

    错误处理

    错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。

    在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。

    就像其他的内建类型(如 intfloat64 等),错误值可以存储在变量里、作为函数的返回值等等。

    package main
    
    import (
        "errors"
        "fmt"
    )
    
    
    func circleArea(radius int) (int, error) {
        if radius < 0 {
            return 0, errors.New("错误信息")  // 如果不满足判断就会显示错误信息
        }
        return 100, nil
    }
    
    func main() {
        a,_:=circleArea(-10)
        if err!=nil{
            fmt.Println(err)
        }
        fmt.Println(a)
        _,err:=fmt.Println()
        if err!=nil{
            fmt.Println("打印出错")
        }
    }

  • 相关阅读:
    protected、public、private
    第十五章 面向对象程序设计
    第十四章 重载运算与类型转换
    聚合类
    explicit构造函数
    allocator类
    直接管理内存——new和delete
    智能指针
    Bugku-CTF之点击一百万次
    Bugku-CTF之flag在index里
  • 原文地址:https://www.cnblogs.com/xiongying4/p/12030309.html
Copyright © 2011-2022 走看看