zoukankan      html  css  js  c++  java
  • go语言基础之处理错误机制

    Go语言中目前(Go1.12)是没有异常机制,但是使用panic/recover模式来处理错误。 panic可以在任何地方引发,但recover只有在defer调用的函数中有效。 首先来看一个例子:

    func funcA() {
    	fmt.Println("func A")
    }
    
    func funcB() {
    	panic("panic in B")
    }
    
    func funcC() {
    	fmt.Println("func C")
    }
    func main() {
    	funcA()
    	funcB()
    	funcC()
    }
    

    输出:

    func A
    panic: panic in B
    
    goroutine 1 [running]:
    main.funcB(...)
            .../code/func/main.go:12
    main.main()
            .../code/func/main.go:20 +0x98
    

    程序运行期间funcB中引发了panic导致程序崩溃,异常退出了。这个时候我们就可以通过recover将程序恢复回来,继续往后执行。

    func funcA() {
    	fmt.Println("func A")
    }
    
    func funcB() {
    	defer func() {
    		err := recover()
    		//如果程序出出现了panic错误,可以通过recover恢复过来
    		if err != nil {
    			fmt.Println("recover in B")
    		}
    	}()
    	panic("panic in B")
    }
    
    func funcC() {
    	fmt.Println("func C")
    }
    func main() {
    	funcA()
    	funcB()
    	funcC()
    }
    

    注意:

    1. recover()必须搭配defer使用。
    2. defer一定要在可能引发panic的语句之前定义。
  • 相关阅读:
    Poj(1459),最大流,EK算法
    Poj(3259),SPFA,判负环
    HDU(3790),最短路二级标准
    Poj(2349),最小生成树的变形
    CSUFT2016训练赛
    NYOJ(21),BFS,三个水杯
    Poj(3687),拓扑排序,
    Poj(2367),拓扑排序
    HDU(1856),裸的带权并查集
    HDU(1572),最短路,DFS
  • 原文地址:https://www.cnblogs.com/fuyuteng/p/15148012.html
Copyright © 2011-2022 走看看