golang异常处理

Python014

golang异常处理,第1张

go语言没有使用像java python等语言的try catch/except 语句来处理异常,而是使用它特有的panic,recover,defer来捕获和处理异常

分析:

divide是一个做除法的函数,可能会出现除数为0的错误,所以在函数一开头就定义了一个defer匿名函数(注意这里的匿名函数定义完后面要带上括号才能执行),这个匿名函数被defer修饰了所以只在divide函数执行完才会执行,而不是一进来就执行。后面判断b是否等于0,如果为零的话我们手动使用panic抛出了异常,这个异常是在divide函数退出前执行的defer匿名函数里通过recover()来捕获的,如果err不为空就说明发生了错误,打印error happen!和panic抛出的divided by zero!! 然后主协程返回到主函数main里,继续执行后面的打印

/*Note:YourchoiceisCIDE*/#include"stdio.h"#include"stdlib.h"#include"ctype.h"intn=0charrecord[20]floatproduct()floatchange()floatmuli(){floatsummsumm=product()while(record[n]=='-'||record[n]=='+'){switch(record[n]){case'+':n++summ+=product()breakcase'-':n++summ-=product()break}}returnsumm}floatproduct(){floatsumpsump=change()while(record[n]=='*'||record[n]=='/'){switch(record[n]){case'*':n++sump*=change()breakcase'/':n++sump/=change()break}}returnsump}floatchange(){floatsumccharrec[20],i=0if(record[n]=='('){n++sumc=muli()}if(record[n]==')')n++while(isdigit(record[n])||record[n]=='.'){while(isdigit(record[n])||record[n]=='.')rec[i++]=record[n++]rec[i]='\0'sumc=atof(rec)}returnsumc}voidmain(){while(1){n=0scanf("%s",record)printf("%s=%g\n",record,muli())}}这个是比较简单的。。。但是有点难理解。。。不过运行绝对正确。。还支持括号。。。但是在这个程序里面我加没有出错处理。。。另一种方法是用栈写。。。这个好理解。。但是麻烦。。。