go语言panic内建函数的用法,及实例

go语言的异常机制

go语言没有异常的相关机制,这一点与python有很大的不同,不过go有panic和recover这样的内建函数,可以简单理解为python的异常的抛出和捕捉的机制。不过,在go语言里头,用panic的地方不多,有文档中介绍说,panic和recover的机制是不得不用的时候才用,尽量少用。这一节,我们先来介绍panic函数及其机制用法。


panic函数的用法

在具体介绍panic( arg )函数的用法之前,我们先来看一个panic的实例:

package main

import "fmt"

func panicfunc() {
	var a int
	fmt.Println("这是正常语句!")
	defer fmt.Println("这是延迟语句!")
	if a == 0 {
		panic("这是panic语句。")
	}
	fmt.Println("同一个函数中,panic后面的语句也不会被执行!")
}

func x1() {
	fmt.Println("这是x1函数!")
}

func y1() {
	fmt.Println("这是y1函数!")
}

func z1() {
	fmt.Println("这是z1函数,包含panicfunc函数!")
	panicfunc()
}

func main() {
	x1()
	z1()
	y1()

}

代码输出:
这是x1函数!
这是z1函数,包含panicfunc函数!
这是正常语句!
这是延迟语句!
panic: 这是panic语句。

goroutine 1 [running]:
main.panicfunc()
        /yourpath/
main.z1()
        /yourpath/
main.main()
        /yourpath/
exit status 2

panic的运行机制

如上代码,及其相关的输出内容,我们可以发现一些panic的规律:

  • panic函数被调用之后,panic后面的代码不会执行,包括同一个函数内的和其他函数的;
  • panic调用之后,defer延迟语句仍然会被执行,而且是先于panic的输出内容;
  • panic函数抛出的“异常”,一般翻译成“恐慌”,会一层一层地往外抛出,先是panicfunc()函数本身,然后调用该函数的z1()函数,再然后是最外层的main()函数。

除此之外,go语言的“异常”可以通过调用panic函数产生,也可以因为go程序的运行错误而产生。


全栈后端 / go语法 :













Copyright © 2022-2024 笨鸟工具 x1y1z1.com All Rights Reserved.