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
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