golang 函数-defer-recover-panic

前端之家收集整理的这篇文章主要介绍了golang 函数-defer-recover-panic前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

函数


1、函数的定义

packagemain

import"fmt"

funcadd(aint,bint)int{//当函数参数类型相同时,除最后一个外其他类型可省略。
//add(aint,bint)==add(a,bint)
	returna+b
}

funcmain(){
	fmt.Println(add(1,2))
}
//执行结果:
#gorunfunc.go
3

2、函数的多返回值

packagemain

import"fmt"

funcadd(a,bint)(int,int){
	returna+b,a-b
}

funcmain(){
	fmt.Println(add(1,2))
}
//执行结果:3-1

3、函数的匿名返回值

packagemain

import"fmt"

funcadd(a,bint)(x,yint){
	x=a+b
	y=a-b
	return//返回值定义返回x,y因此return后面可省略
}

funcmain(){
	fmt.Println(add(1,2))
}

4、函数不定长参数

packagemain

import"fmt"

funcadd(a,yint){
	x=a+b
	y=a-b
	return
}

funcsum(args...int)int{
	final:=0
	for_,value:=rangeargs{//当遍历时索引信息不需要可以用"_"来代替.
		final+=value
	}
	returnfinal

}


funcmain(){
	fmt.Println(add(1,2))
	fmt.Println(sum(1,2,3,4,5,6))
}
//执行结果:
3-1
21

5、函数嵌套函数

packagemain

import"fmt"

funcadd(a,bint)int{
	num:=1
	sub:=func()int{
		num-=1
		returnnum
	}
	fmt.Println(sub())
	returna+b
}

funcmain(){
	fmt.Println(add(1,2))
}
//执行结果:
0
3

defer


1、defer可以在函数执行体都执行完后在执行

packagemain

import"fmt"

funcclean(){
	fmt.Println("dosomethinginclean")
}

funcmain(){
	deferclean()
	fmt.Println("endmain")
}
//执行结果:
endmain
dosomethinginclean


recover

1、当程序出错时,可以通过recover来捕捉

packagemain

import"fmt"

funcsafeDivision(a,bint)int{
	deferfunc(){
		fmt.Println(recover())
	}()
	v:=a/b
	returnv
}

funcmain(){
	safeDivision(1,0)
	fmt.Println("endmain")
}
//执行结果:
runtimeerror:integerdividebyzero
endmain

panic

1、可以通过panic来抛出异常,通过recover来捕捉

packagemain

import"fmt"

funcdemPanic(){
	deferfunc(){
		fmt.Println(recover())
	}()
	panic("PANIC")
}

funcmain(){
	demPanic()
	fmt.Println("endmain")
}
//执行结果:
PANIC
endmain

猜你在找的Go相关文章