Go语言学习笔记八--Go语言中函数的所有用法 与 defer关键字

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 }
原文地址:https://www.cnblogs.com/xwxz/p/13299418.html