golang 函数-defer-recover-panic
函数
1、函数的定义
packagemainimport"fmt"funcadd(aint,bint)int{//当函数参数类型相同时,除最后一个外其他类型可省略。//add(aint,bint)==add(a,bint)returna+b}funcmain(){fmt.Println(add(1,2))}//执行结果:#gorunfunc.go3
2、函数的多返回值
packagemainimport"fmt"funcadd(a,bint)(int,int){returna+b,a-b}funcmain(){fmt.Println(add(1,2))}//执行结果:3-1
3、函数的匿名返回值
packagemainimport"fmt"funcadd(a,bint)(x,yint){x=a+by=a-breturn//返回值定义返回x,y因此return后面可省略}funcmain(){fmt.Println(add(1,2))}
4、函数不定长参数
packagemainimport"fmt"funcadd(a,bint)(x,yint){x=a+by=a-breturn}funcsum(args...int)int{//参数为slicefinal:=0for_,value:=rangeargs{//当遍历时索引信息不需要可以用"_"来代替.final+=value}returnfinal}funcmain(){fmt.Println(add(1,2))fmt.Println(sum(1,2,3,4,5,6))}//执行结果:3-121
5、函数嵌套函数
packagemainimport"fmt"funcadd(a,bint)int{num:=1sub:=func()int{num-=1returnnum}fmt.Println(sub())returna+b}funcmain(){fmt.Println(add(1,2))}//执行结果:03
6、内置函数
1、close:主要用于关闭channel2、len用来求长度,比如string\array\slice\map\channel3、new用来分配内存,主要用来分配值类型比如intstruct返回的是指针4、make用来分配内存主要用于分配引用类型比如mapchanslice5、append用来追加元素到数组slice中6、panic和recover用来做错误处理
7、递归函数
函数自己调用自己叫做递归packagemainimport"fmt"import"time"test(){fmt.Println("hello")time.Sleep(time.Second)}funcmain(){test()}#执行结果:hellohellohellohellohellohellohello...
defer
1、defer可以在函数执行体都执行完后在执行
多个defer遵循先进后出
packagemainimport"fmt"funcclean(){fmt.Println("dosomethinginclean")}funcmain(){deferclean()fmt.Println("endmain")}//执行结果:endmaindosomethinginclean
recover
1、当程序出错时,可以通过recover来捕捉
packagemainimport"fmt"funcsafeDivision(a,bint)int{deferfunc(){fmt.Println(recover())}()v:=a/breturnv}funcmain(){safeDivision(1,0)fmt.Println("endmain")}//执行结果:runtimeerror:integerdividebyzeroendmain
panic
1、可以通过panic来抛出异常,通过recover来捕捉
packagemainimport"fmt"funcdemPanic(){deferfunc(){fmt.Println(recover())}()panic("PANIC")}funcmain(){demPanic()fmt.Println("endmain")}//执行结果:PANICendmain
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。