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,汇总所有流程,进行错误打印并退出进程。

  • 相关阅读:
    集合-ConcurrentSkipListMap 源码解析
    集合-跳表SkipList
    集合-ConcurrentHashMap 源码解析
    >>《移动设计模式大观.pdf》
    >>《《iOS 人机界面准则》中文版.pdf》
    >《Web导航设计.pdf》
    >>《设计心理学名着-2 情感化设计 诺曼着.pdf》
    自制网页(html+css+js+jQuery)
    仿写抽屉新热榜 (html+css)
    运动员喝饮料问题
  • 原文地址:https://www.cnblogs.com/niuben/p/15268126.html
Copyright © 2011-2022 走看看