zoukankan      html  css  js  c++  java
  • Golang基础——异常处理

    异常处理

    panic : 相当于 python 的 raise

    func test111() interface{} {
    	return 1 / 1
    }
    
    func main() {
    	a := test111()
    	// panic("111")  // 报错结束,致命错误,一般不用 相当于 raise
    	fmt.Println(a)
    }
    
    

    defer : 栈结构

    func main() {
        defer fmt.Println("good")  // 最后执行,必须在函数内使用
    	defer fmt.Println("world") // 后进先出,栈结构
    	// world
    	// good
    	// defer中,延迟调用函数,报错,其他代码依然执行
    
    	x := 10
    	y := 20
    	defer func() {
    	  fmt.Println(x, y)
    	}()
    	x = 100
    	y = 200
    	fmt.Println(x, y)
    	// 100 200
    	// 100 200
    
    	x := 10
    	y := 20
    	defer func(x int, y int) {
    	fmt.Println(x, y)
    	}(x, y)
    	x = 100
    	y = 200
    	fmt.Println(x, y)
    	// 100 200
    	// 10 20
    	// defer 虽然后执行,但是如果匿名函数有参数,会先传参数,再后执行。
    }
    

    recover : 相当于 try except

    func tcore(x int) {
    	var a [1]int
    	fmt.Println(a[x])
    }
    
    func tcore1(x int) { // recover 必须搭配defer使用,并且匿名函数 相当于 try except
    	defer func() { // recover 必须在defer调用的函数中使用
    		if err := recover(); err != nil { // 如果recover返回为空,说明没报错,不打印
    			fmt.Println(recover())
    		}
    	}()
    	var a [1]int
    	fmt.Println(a[x])
    }
    
    // aaa
    // runtime error: index out of range [3] with length 1
    // bbb
    
    func main() {
    	fmt.Println("aaa")
    	// tcore(3) // 运行报错结束
    	tcore1(0) // 不会报错,继续运行,recover (搭配defer使用)
    	fmt.Println("bbb")
    }
    
    

    recover() 补充

    package main
    
    import "fmt"
    
    func getitem(i int) interface{}{
    	defer func(){
    		// fmt.Println(recover())  // Println 也是取出
    		if err:=recover();err!=nil{
    			//fmt.Println(recover())  // 结果为:nil,已经赋值给err,不能再取,管道
    			fmt.Println(err)  // runtime error: index out of range
    		//	fmt.Println("aaa")
    		}
    	}()
    	arr := []int{1,2,3}
    	fmt.Println(arr[i])
        return arr[i]
    }
    
    func main() {
    	getitem(3)  // runtime error: index out of range
    	getitem(2)  // 3
    }
    
  • 相关阅读:
    巡风源码阅读与分析---nascan.py
    自动化代码中,用到了哪些设计模式?
    jmeter提取器的使用及说明
    jmeter的插件管理—jpgc插件下载安装
    unittest之mock测试
    jmeter环境配置及基础使用
    jenkins发送email邮件的配置
    软件性能测试基础说明
    python发送email邮件
    使用SQLyog对mysql数据库的数据结构进行导出、导入
  • 原文地址:https://www.cnblogs.com/pythonwl/p/14664473.html
Copyright © 2011-2022 走看看