zoukankan      html  css  js  c++  java
  • golang 使用goto进行多错误处理

    goto 语句介绍

    在 Go 语言中,可以通过goto语句跳转到标签,进行代码间的无条件跳转。另外,goto语句在快速跳出循环、避免重复退出方面可以简化代码实现过程,但在结构化程序设计中一般不主张使用goto语句,以免造成程序流程的混乱,使理解和调试程序都产生困难。

    语法

    goto label;
    ..
    .
    label: statement;
    

    goto 语句流程图如下:

    实例

    在满足条件时,连续退出两层循环,传统编码方式如下:

    func main() {
    	var isBreak bool
    	for x := 0; x < 20; x++ { 		 // 外循环
    		for y := 0; y < 20; y++ {        // 内循环
    			if y == 2 { 		 // 当y等于2时
    				isBreak = true 	 // 设置退出标记
    				break          	 // 退出内层循环
    			}
    		}
    		if isBreak { // 根据标记退出外层循环
    			break
    		}
    	}
    	fmt.Println("over")
    }
    

    将上面的代码使用 goto 语句进行优化:

    func main() {
    	for x := 0; x < 20; x++ {
    		for y := 0; y < 20; y++ {
    			if y == 2 {
    				goto breakTag // 跳转到标签
    			}
    		}
    	}
    	return
    breakTag: // 标签
    	fmt.Println("123")
    }
    

    在以上代码中,使用 goto 语句 goto breakTag跳转到指定的自定义的标签 breakTag处,在定义 breakTag 标签之前有个 return 语句,此处如果不手动返回,则在不满足条件时也会执行 breakTag 代码。

    多错误处理

    在日常开发中,经常会遇到多错误处理问题,在多错误处理中往往存在代码重复的问题。例如:

    func main() {
    	// 省略前面代码
    	err := getUserInfo()
    	if err != nil {
    		fmt.Println(err)
    		exitProcess()
    		return
    	}
    	err = getEmail()
    	if err != nil {
    		fmt.Println(err)
    		exitProcess()
    		return
    	}
    	fmt.Println("over")
    }
    

    在上面代码中,处理错误时,有一部分代码都是重复的。如果后期需要在这些代码中添加更多的判断条件,则需要在这些先相同的代码中重复修改,很容易造成疏忽和错误。这时可以通过 goto 语句来处理:

    func main() {
    	// 省略前面代码
    	err := getUserInfo()
    	if err != nil {
    		goto doExit
    	}
    	err = getEmail()
    	if err != nil {
    		goto doExit
    	}
    	
    	fmt.Println("over")
    	return
    doExit: // 汇总所有流程,进行错误打印并退出进程
    	fmt.Println(err)
    	exitProcess()
    }
    

    以上代码在发生错误时,将统一跳转到自定义错误标签 doExit,汇总所有流程,进行错误打印并退出进程。

  • 相关阅读:
    【2017-03-09】SQL Server 数据库基础、四种约束
    【2017-03-05】函数基础、函数四种结构、ref和out参数、递归
    procecss on技巧
    角度与弧度
    C语言求π的方法
    三轴加速度传感器角度值转换原理
    C获取数组长度
    如何使用ProcessOn制作思维导图
    processon完全装逼指南
    NORDIC GATT事件
  • 原文地址:https://www.cnblogs.com/niuben/p/15268126.html
Copyright © 2011-2022 走看看