您好,登錄后才能下訂單哦!
函數(shù)
1、函數(shù)的定義
package main import "fmt" func add(a int, b int) int { // 當(dāng)函數(shù)參數(shù)類型相同時(shí),除最后一個(gè)外其他類型可省略。 // add(a int,b int) == add(a,b int) return a+b } func main(){ fmt.Println(add(1,2)) } //執(zhí)行結(jié)果: # go run func.go 3
2、函數(shù)的多返回值
package main import "fmt" func add(a, b int) (int,int) { return a+b,a-b } func main(){ fmt.Println(add(1,2)) } //執(zhí)行結(jié)果:3 -1
3、函數(shù)的匿名返回值
package main import "fmt" func add(a, b int) (x,y int) { x = a + b y = a - b return //返回值定義返回x,y 因此return 后面可省略 } func main(){ fmt.Println(add(1,2)) }
4、函數(shù)不定長(zhǎng)參數(shù)
package main import "fmt" func add(a, b int) (x,y int) { x = a + b y = a - b return } func sum(args ...int) int{ //參數(shù)為slice final := 0 for _,value := range args { //當(dāng)遍歷時(shí)索引信息不需要可以用"_"來(lái)代替. final += value } return final } func main(){ fmt.Println(add(1,2)) fmt.Println(sum(1,2,3,4,5,6)) } //執(zhí)行結(jié)果: 3 -1 21
5、函數(shù)嵌套函數(shù)
package main import "fmt" func add(a, b int) int { num := 1 sub := func() int{ num -= 1 return num } fmt.Println(sub()) return a+b } func main(){ fmt.Println(add(1,2)) } //執(zhí)行結(jié)果: 0 3
6、內(nèi)置函數(shù)
1、close:主要用于關(guān)閉channel 2、len 用來(lái)求長(zhǎng)度,比如string\array\slice\map\channel 3、new 用來(lái)分配內(nèi)存,主要用來(lái)分配值類型比如 int struct 返回的是指針 4、make 用來(lái)分配內(nèi)存 主要用于分配引用類型 比如 map chan slice 5、append 用來(lái)追加元素到數(shù)組 slice中 6、panic 和recover 用來(lái)做錯(cuò)誤處理
7、遞歸函數(shù)
函數(shù)自己調(diào)用自己叫做遞歸 package main import "fmt" import "time" test(){ fmt.Println("hello") time.Sleep(time.Second) } func main(){ test() } # 執(zhí)行結(jié)果: hello hello hello hello hello hello hello ...
defer
1、defer可以在函數(shù)執(zhí)行體都執(zhí)行完后在執(zhí)行
多個(gè)defer遵循先進(jìn)后出
package main import "fmt" func clean(){ fmt.Println(" do something in clean ") } func main(){ defer clean() fmt.Println("end main") } //執(zhí)行結(jié)果: end main do something in clean
recover
1、當(dāng)程序出錯(cuò)時(shí),可以通過(guò)recover來(lái)捕捉
package main import "fmt" func safeDivision(a,b int) int { defer func(){ fmt.Println(recover()) }() v := a / b return v } func main(){ safeDivision(1,0) fmt.Println("end main") } //執(zhí)行結(jié)果: runtime error: integer divide by zero end main
panic
1、可以通過(guò)panic來(lái)拋出異常,通過(guò)recover來(lái)捕捉
package main import "fmt" func demPanic() { defer func(){ fmt.Println(recover()) }() panic("PANIC") } func main(){ demPanic() fmt.Println("end main") } //執(zhí)行結(jié)果: PANIC end main
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。