什麼是函數
有輸入、輸出,用來執行特定功能的代碼塊
func functionnname([partmeternam type]) [return type] { // function body }
函數的幾種類型
無參數返回值的函數
有參數返回值的函數
defer 語句
1、無參數返回值的函數
package main import "fmt" func functiontest1(a,b int) int { return a + b // 輸出 15 } func main() { sum1 :=functiontest1(12,3) fmt.Println(sum1) }
2、有參數返回值的函數
多返回值
package main import "fmt" func functiontest2(a,b int) (int,int) { sum := a + b sub := a - b return sum,sub } func main() {
sum,sub := functiontest2(13,4) fmt.Printf("sum=%d\n sub=%d",sum,sub) // 輸出 sum=17 sub=9 }
對返回值進行命名
package main import "fmt" func functiontest3(a,b int) (sum int,sub int) { sum = a + b sub = a - b return } func main() { sum,sub := functiontest3(30,40) fmt.Printf("sum=%d\n sub=%d",sum,sub) // 輸出 sum=70 sub=-10 }
_標識符 不需要輸出的可以使用 _ 表示
package main import "fmt" func functiontest4(a,b int) (sum int,sub int) { sum = a + b sub = a - b return } func main() { sum,_ := functiontest4(21,10) fmt.Printf("sum=%d",sum) // 輸出 sum=31 }
可變參數1 ,傳遞數組args
func functiontest5(a...int) (sum int) { for i := 0; i < len(a); i++ { sum =sum + a[i] } fmt.Println(sum) return sum } func main() { functiontest5(11,12,9) // 輸出 32 }
可變參數2
package main import "fmt" func functiontest6(a int, b ...int) (sum int, sub int) { s1 := 0 for i := 0; i < len(b); i++ { s1 = s1 + b[i] } sum = s1 + a sub = s1 - a return sum,sub } func main() { sum,sub := functiontest6(1,2,311,4) fmt.Println(sum,sub) // 輸出 318 316 }
defer
defer 的作用: 在函數中,程序員經常需要創建資源(比如:數據庫連接、文件句柄、鎖等) ,爲了在函數執行完 畢後,及時的釋放資源,Go 的設計者提供 defer (延時機制)。
單個defer 先進後出
package main import "fmt" func defer_test1(a int ,b...int) (sum int,sub int) { defer fmt.Println("deffer") for i := 0; i < len(b); i++ { fmt.Println(b[i]) } return } func main() { defer_test1(1,123,23,45,6) // 輸出 123 23 45 6 deffer }
多個deffer
func defer_test1(a int ,b...int) (sum int,sub int) { defer fmt.Println("deffer1") defer fmt.Println("deffer2") defer fmt.Println("deffer3") for i := 0; i < len(b); i++ { fmt.Println(b[i]) } return } func main() { defer_test1(1,123,23,45,6) // 輸出 123 23 45 6 deffer3 deffer2 deffer1 }