golang recover panic 流程控制的可达与不可达

--------------------------流程控制可达-----------------------------
package main

import "fmt"

func explode() {
    // Cause a panic.
    panic("WRONG")

}

func throwPanic(f func()) {
    defer func() {
        if err := recover(); err != nil {
            // Handle our error.
            fmt.Println("FIX")
            fmt.Println("ERR", err)
        }
    }()
    f()
    fmt.Println(" finish")
}

func main() {
    throwPanic(explode)
    fmt.Println(" reach here ")//可达
}



--------------------------流程控制不可达-----------------------------
package main

import "fmt"

func explode() {
    // Cause a panic.
    panic("WRONG")
}

func main() {
    // Handle errors in defer func with recover.
    defer func() {
    if err := recover(); err != nil {
        // Handle our error.
        fmt.Println("FIX")
        fmt.Println("ERR", err)
    }
    }()
    // This causes an error.
    explode()
    fmt.Println(" reach here ")// 达不到
}

 

本文来自:博客园

感谢作者:rojas

查看原文:golang recover panic 流程控制的可达与不可达

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。