目錄golang
函數聲明格式ide
func 函數名( [參數列表] ) [返回值類型列表] { 函數體 }
全部類型函數
//package 聲明開頭表示代碼所屬包 package main import "fmt" //無參無返回值 func test01(){ fmt.Println("三無產品") } //有參無返回值 func test02(v1 int, v2 int){ fmt.Println(v1, v2) } func test022(v1, v2 int) { fmt.Println(v1, v2) } //有不定參數無返回值 func test03(args ...int){ //遍歷 for _,n := range args{ fmt.Println(n) } } func main() { test03(1, 2, 3) } //無參有返回值 func test04()(a int, str string){ a = 666 str = "沙雕" return } //有參有返回值 func test05(num1 int, num2 int)(min int, max int){ if num1 > num2{ min = num2 max = num1 }else{ max = num2 min = num1 } return }
練習: 分別經過循環和遞歸函數,計算1+2+3……+100code
//package 聲明開頭表示代碼所屬包 package main import "fmt" //第一種 func test011() int { i := 1 sum := 0 for i = 1; i <= 100; i++ { sum += i } return sum } //第二種 func test012(num int) int { if num == 1 { return 1 } return num + test012(num-1) } func main() { //fmt.Println(test011()) fmt.Println(test012(100)) }
釋放資源的defer應該直接跟在請求資源的語句後,以避免忘記釋放資源遞歸
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { defer fmt.Println("defer語句") fmt.Println("打醬油") } //打醬油 //defer語句
//package 聲明開頭表示代碼所屬包 package main import "fmt" func test99(x int){ fmt.Println(100 / x) } func main() { defer fmt.Println("1號門") defer fmt.Println("2號門") test99(0) defer fmt.Println("3號門") } //2號門 //1號門 //panic: runtime error: integer divide by zero // //goroutine 1 [running]: //main.test99(0x0) //D:/awesomeProject/first.go:7 +0xb3 //main.main() //D:/awesomeProject/first.go:13 +0xed