什么是函数
有输入、输出,用来执行特定功能的代码块
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 }
有疑问加站长微信联系(非本文作者)