Go语言中函数的所有用法
代码中包括不带参数、带参数、多参数、有返回值、无返回值、多返回值、匿名函数的简单示例
1 package main 2 3 import "fmt" 4 5 //函数名大写可以在包外进行访问 函数名小写只能在包内进行访问 变量名亦是如此 6 7 8 //无参数无返回值的函数 9 func printHello() { 10 println("*******************") 11 println("** **") 12 println("** Hello World! **") 13 println("** **") 14 println("*******************") 15 } 16 17 //一个返回值实现两个数的相加 18 func add(a int, b int) int { 19 return a + b 20 } 21 22 //如果参数类型一样 则前面的可以省略 23 func add2(a,b,c,d int) int { 24 return a+b+c+d 25 } 26 27 //多返回值 28 func add3(a,b int) (int,int) { 29 sum := a+b 30 sub := a-b 31 return sum, sub 32 } 33 //多返回值 返回值名字已经固定,所以函数体直接用,自动返回,也不用写在return里面 34 func add4(a, b int) (sum int, sub int) { 35 sum = a+b 36 sub = a-b 37 return 38 } 39 //多参数 40 func add5(b ...int) int{ 41 sum := 0 42 for i := 0; i < len(b); i++ { 43 sum += b[i] 44 } 45 return sum 46 } 47 48 //defer的使用 49 func printHello2() { 50 defer println("我是defer的语句,我在函数执行快返回的时候才会调用我") 51 defer println("我是defer的语句,我主要用于文件使用结束然后关闭文件的场景") 52 defer println("我是defer1") 53 defer println("我是defer2 这个是基于栈来实现的,所以在最后面的反而会先打印出来") 54 println("*******************") 55 println("** **") 56 println("** Hello World! **") 57 println("** **") 58 println("*******************") 59 } 60 61 func defer1(){ 62 i := 0 63 defer fmt.Printf("defer后i的值为 %d ",i) //0 64 i = 100 65 println("i的值为:",i) 66 } 67 68 func defer2(){ 69 i := 0 70 //下面这里是匿名函数 71 defer func(a int,b int) { 72 fmt.Printf("defer后i的值为 %d ",i) //100 73 println(a,b) 74 }(50,100) 75 i = 100 76 println("i的值为:",i) 77 } 78 79 //函数作为参数的例子 fun的参数类型为 "func(int, int) int" 80 func calc(a , b int, fun func(int, int) int) int { 81 return fun(a,b) 82 } 83 func addCalc(a, b int) int { 84 return a+b 85 } 86 func subCalc(a, b int) int { 87 return a-b 88 } 89 90 91 92 func main() { 93 printHello() 94 var c = add(3,2) 95 println("add1 后 c的值为:",c) 96 97 c = add2(1,2,3,4) 98 println("add2 后 c的值为:",c) 99 100 sum,sub := add3(12,23) 101 println("add3 sum的值为:",sum," str的值为:",sub) 102 103 sum,sub = add4(23,32) 104 println("add4-1 sum的值为:",sum," str的值为:",sub) 105 106 //下划线表示忽略这个返回值 不需要它 107 sum,_ = add4(55,77) 108 println("add4-2 sum的值为:",sum) 109 110 println("这个是0参数的函数相加结果:",add5()) 111 println("这个是3参数的函数相加结果:",add5(1,2,3)) 112 println("这个是9参数的函数相加结果:",add5(1,2,3,4,5,6,7,8,9)) 113 114 //这个是查看defer的用法 115 printHello2() 116 117 // anonymity 匿名函数 函数也是一种类型 所以可以通过一个变量名进行存储函数变量 118 anonymityFun := printHello 119 fmt.Printf("fun函数的类型是%T ",anonymityFun) 120 anonymityFun() 121 122 //defer 与匿名函数 123 defer2() 124 125 //函数作为参数的例子 126 println("函数作为参数的例子") 127 sum = calc(2,5, addCalc) 128 sub = calc(8,4, subCalc) 129 println("sum的值为", sum, "sub的值为", sub) 130 131 }