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 ")// 达不到
}
时间: 2024-11-05 15:29:54

golang recover panic 流程控制的可达与不可达的相关文章

【GoLang】panic defer recover 深入理解

先等我想清楚golang错误处理 为什么要这么设计的时候 再来更新... Golang这么时尚的语言是没有类似try..catch 这种异常处理机制,而是使用 panic 和 recover处理异常. 其实相当于python的raise. golang的异常处理组合 panic,defer,recover,跟java中的try catch finially是类似的. 但是从语言的用户体验来说,不怎么好. 但考虑到golang的场景基本是系统高性能层面的,这种精准错误处理应该减少那种后遗症bug.

GoLang的流程控制

流程控制 1.三大流程控制 顺序控制 分支控制 循环控制 2.顺序控制 程序从上到下逐行地执行,中间没有任何判断和跳转 3.分支控制 分支控制就是让程序有选择执行.有下面三种形式 单分支 双分支 多分支 3.1.单分支 if 条件表达式 { // } 3.2.双分支 if 条件表达式 { // } else { // } 3.3.多分支 if 条件表达式 { // } else if 条件表达式2 { // } ... else { } 3.4.嵌套分支 if 条件表达式 { if 条件表达式2

golang 流程控制

Go语言的流程控制主要分为三大类: 1. 条件判断 2. 循环控制 3. 无条件跳转 条件判断 Go语言的条件判断由if ... else if ... else 语句实现,条件表达式值必须是布尔类型,可省略圆括号,但是花括号不能省略且左花括号不能另起一行,比如: if 7%2 == 0 {     fmt.Println("7 is even") } else {     fmt.Println("7 is odd") }     if 8%4 == 0 {   

go语言-golang基础-流程控制

1 流程控制程序设计语言的流程控制语句,用于设定计算执行的次序,建立程序的逻辑结构.可以说,流程控制语句是整个程序的骨架.从根本上讲,流程控制只是为了控制程序语句的执行顺序,一般需要与各种条件配合,因此, 在各种流程中,会加入条件判断语句.流程控制语句一般起以下3个作用: 选择,即根据条件跳转到不同的执行序列; 循环,即根据条件反复执行某个序列,当然每一次循环执行的输入输出可能会发生变化; 跳转,即根据条件返回到某执行序列. Go语言支持如下的几种流程控制语句: 条件语句,对应的关键字为if.e

流程控制:分布式并行任务流程控制

背景: 目前工作中遇到一个比较急,又有点费事的工作任务: 1)目前系统中已经已经包含了一些比较完善的部分模块,但是模块之间没有一个控制流程来管理,就造成程序没有办法自动化: 2)已经完成模块中有几个是采用分布式部署,但各个服务器之间又是采用的并行执行不同的任务(目的最大化利用服务器,节省处理总耗时):这写对流程化控制带来了一些控制繁琐问题. 3)目前并不需要考虑太多稳定行的问题,但是流程控制程序必须考虑到高可用性(就是需要部署为HA). 目前已经拥有的功能模块: 1)采集及更新工参.KPI.路测

Go语言流程控制

目录 顺序控制 分支控制 switch 循环控制 for break continue goto 在程序中,程序运行的流程控制决定程序是如何执行的,是我们必须掌握的,主要有三大流程控制语句. 顺序控制 分支控制 循环控制 顺序控制 程序从上到下逐行的执行,中间没有任何判断和跳转. 分支控制 让程序有选择的执行,分支控制有三种: (1)单分支 if 条件表达式 { //执行代码块 } (2)双分支 if 条件表达式 { //执行代码块 } else { //执行代码块 } (3)多分支 if 条件

流程控制之分支循环

在编写 Go 程序的时候,我们不仅会用前面学到的数据结构来存储数据,还会用到 if.switch.for 来进行条件判断和流程控制,今天我们就来一起学习下它们. if if 主要用于条件判断,语法为: if 条件 { # 业务代码 } 先看一个简单例子: package main import "fmt" func main() { age := 7 if age > 6 { fmt.Println("It's primary school") } } 我们可

Go语言--流程控制

流程控制是每种编程语言控制逻辑走向和执行次序的重要部分,流程控制可以说是一门语言的“经脉”. Go语言中最常用的流程控制有if和for,而switch和goto主要是为了简化代码.降低重复代码而生的结构,属于扩展类的流程控制. 1.If else(分支结构) Go语言中if条件判断的格式如下: if 表达式1 { 分支1 } else if 表达式2 { 分支2 } else{ 分支3 } 当表达式1的结果为true时,执行分支1,否则判断表达式2,如果满足则执行分支2,都不满足时,则执行分支3

Java架构师成长之道之程序流程控制

Java架构师成长之道之程序流程控制 Java架构师成长之道 4.1 程序流程控制概述 之前编写的绝大多数程序都是顺序执行,也就是从main函数开始,由上到下一行一行的执行,也被称为顺序结构. 在生活中除了顺序结构以外还有选择结构.循环结构,例如在淘宝购物时登录账号就是一个选择结构,如果输入的正确的用户名和密码才能购买商品,否则就会提示用户名密码错误. 而在淘宝首页的Banner就是一个循环结构,在指定的时间内循环切换图片. 在Java中,支持if/else和switch case两种选择结构,