Go语言中异常处理painc()和recover()的用法

Go语言中异常处理painc()和recover()的用法

1、Painc用法是:用于抛出错误。Recover()用法是:将Recover()写在defer中,并且在可能发生panic的地方之前,先调用此defer的东西(让系统方法域结束时,有代码要执行。)当程序遇到panic的时候(当然,也可以正常的调用出现的异常情况),系统将跳过后面的代码,进入defer,如果defer函数中recover(),则返回捕获到的panic的值。

2、代码:

package main

import "fmt"

func main() {
	fmt.Printf("hello world my name is %s, I‘m %d\r\n", "songxingzhu", 26)
	defer func() {
		if err := recover(); err != nil {
			fmt.Println("出了错:", err)
		}
	}()
	myPainc()
	fmt.Printf("这里应该执行不到!")
}
func myPainc() {
	var x = 30
	var y = 0
	//panic("我就是一个大错误!")
	var c = x / y
	fmt.Println(c)
}

 

3、执行结果:

Atom Runner: main.go

hello world my name is songxingzhu, I‘m 26
出了错: runtime error: integer divide by zero
Exited with code=0 in 1.667 seconds

  

时间: 2024-10-23 23:30:59

Go语言中异常处理painc()和recover()的用法的相关文章

go语言中使用defer、panic、recover处理异常

go语言中的异常处理,没有try...catch等,而是使用defer.panic.recover来处理异常. 1.首先,panic 是用来表示非常严重的不可恢复的错误的.在Go语言中这是一个内置函数,如果在程序中遇到异常,或者调用panic函数,程序会立即退出(除非recover).如下代码: package main import "fmt" func main() { a := 10 b := 0 c := a / b fmt.Println(c) } 程序的输出如下: ? de

C语言中利用setjmp和longjmp做异常处理

错误处理是任何语言都需要解决的问题,只有不能保证100%的正确运行,就需要有处理错误的机制.异常处理就是其中的一种错误处理方式. 1 过程活动记录(Active Record) C语言中每当有一个函数调用时,就会在堆栈(Stack)上准备一个被称为AR的结构,抛开具体编译器实现细节的不同,这个AR基本结构如下所示. 每当遇到一次函数调用的语句,C编译器都会产生出汇编代码来在堆栈上分配这个AR.例如下面的C代码: void a(int i) { if(i==0){ i = 1; } else {

C语言中的异常处理机制

#define try if(!setjmp(Jump_Buffer)) 返回try现场后重新执行判断,所以有两次执行. http://blog.csdn.net/tian_dao_chou_qin/article/details/6386621 1.概述 什么是异常?异常一般指的是程序运行期(Run-Time)发生的非正常情况.异常一般是不可预测的,如:内存不足.打开文件失败.范围溢出等.UNIX 使用信号给出异常,并当发生异常时转跳到信号处理过程进行异常处理.DOS下的信号对比UNIX系统而

Java语言中的----多态和异常处理

day13 Java语言中的----多态和异常处理 一.概述: 学习Java语言就要理解Java中的面向对象的四大特征:分别是封装.抽象.继承.多态.前面三个我们已经学完了,下面我们来学一下多态.什么是多态?不明思议就是具有两种形态性,一个方法可以定义两种形态,这就是方法的多态性.同时我们还会学习到什么是方法重载.和方法签名. 异常处理就是在编译的时候需要我们手动的去处理一下编译都不能够通过的程序.使用try {} catch{}结构就可以处理异常. 二.多态: 1.所有类的基类是object,

Go语言之异常处理

在编写Go语言代码的时候,我们应该习惯使用error类型值来表明非正常的状态.作为惯用法,在Go语言标准库代码包中的很多函数和方法也会以返回error类型值来表明错误状态及其详细信息. error是一个预定义标识符,它代表了一个Go语言內建的接口类型.这个接口的类型声明如下: type error interface{ Error() string } 其中的Error方法声明的意义就在于为方法调用方提供当前错误状态的详细信息.任何数据类型只要实现了这个可以返回string类型值的Error方法

C语言中一些乱七八糟的用法与细节(不断更新)

用C语言比较多,这篇是平时攒下的.有些内容在工作后可能会很常见,但是不用容易忘,所以就写篇博客吧. 一.printf的用法 %*可以用来跳过字符,可以用于未知缩进.像下面一样. for(i = 1; i < 10; i++) { printf("%*c\r%*c\n",  9 - abs(i - 5), '*', abs(i - 5) + 1, '*'); } %[]可以用来读取指定的内容,%[^]可以用来忽略指定内容(正则表达式?) %m可以不带参数,输出产生的错误信息 二.关

在C语言中以编程的方式获取函数名

调试常用的 __FILE__, __FUNCTION__, __LINE__ 调试常用的 __FILE__, __FUNCTION__, __LINE__ 没想到 VC6 不支持 __FUNCTION__ 所以我写了如下的奇怪代码 //用来记录当前行和当前函数//也可说是记录 堆栈void log_stack(const char *file, int line, const char * function); //当然还要对 __FUNCTION__ 宏作点修饰,因为这个宏只是在函数里面才起作

『Python CoolBook』C扩展库_其六_从C语言中调用Python代码

一.C语言运行pyfun的PyObject对象 思路是在C语言中提供实参,传给python函数: 获取py函数对象(PyObject),函数参数(C类型) 获取GIL(PyGILState_Ensure) 确保fun对象可调用 参数转换为python对应类型(Py_BuildValue) 调用python函数(PyObject_Call) 确定调用无异常 检查返回值 释放GIL(PyGILState_Release) 异常处理 #include "Python.h" /* Execut

C 语言中函数的跳转

1.同一个函数内,可以使用goto语句: eg: void  text_1( void ) { char i=0; a : i++; printf ( " text_1 = %d \r\n" , i); goto a ; } 2.不同函数之间的跳转,可以使用 setjmp / longjmp 函数: eg: jmp_buf   jb; char i=0; void   text_2 ( void ) { setjmp(jb);  // 保存当前AR到jb变量中 i++; printf