func main() { println("无参数无返回值函数") myFunc1() println("有参数无返回值") myFunc2(2,2.9) println("不定参数") myFun3(1,2,3,4,5) var a,b,c int a = myFunc4(2,2) println("----------",a) b,c = myFunc5(2,2) println("----------",b,c) } //无参数无返回值函数 func myFunc1() { println("11111") } //有参数无返回值 func myFunc2(a int,b float32) { fmt.Println(a,b) } //不定参数 func myFun3(a int,args...int) { println("参数的个数",len(args)) for i,data:=range args{ println(i,data) } } //有参数有一个返回值 func myFunc4(a int,b int)(result int) { result = a + b return result } //有参数有多个返回值 func myFunc5(a int,b int)(result1 int,result2 int) { result1 = a + b result2 = a - b return result1,result2 }函数类型
//函数类型 //定义两个int参数,一个int返回值的函数类型,之后可以定义这个函数类型的变量 type MyFuncType func(int,int)(int) func main() { var myfunc MyFuncType myfunc = add var result int result = myfunc(8,9) println(result) myfunc = jian result = myfunc(8,9) println(result) } func add(a,b int)(result int){ result = a+b return result } func jian(a,b int)(result int){ result = a-b return result }回调函数
//回调函数 //多态(函数类型相同,但函数的实现不同),可以先定义,但是没有实现 type MyFuncType func(int,int)(int) func main() { var a int a = MyFunc(1,2,add) println(a) a = MyFunc(1,2,jian) println(a) } func MyFunc(a,b int,funcType MyFuncType)(result int) { result = funcType(a,b) return result } func add(a,b int)(result int){ result = a+b return result } func jian(a,b int)(result int){ result = a-b return result }匿名函数
匿名函数可以捕获同一级的其他变量,用来实现闭包
func main() { var a = 10 f1 := func(){ println(a) } f1() }闭包
其实就是定义匿名函数后直接调用,闭包已引用方式捕获同级变量(会改变)
闭包只要还在使用变量,那么这个变量就存在,而不会被回收。
无参数无返回值的闭包
func main() { var a = 10 func(){ println(a) }() }
有参数有返回值的闭包
func main() { var a = 10 var b = 20 num := func(num1,num2 int)(result int){ result = num1 + num2 return result }(a,b) println(num) }资源释放defer
在函数释放前执行,非正常释放(如崩溃)也会执行
多个defer先进后出
func main() { var a = 10 var b = 20 num := func()(result int){ defer println("执行结束") result = a + b println("函数返回") return result }() println(num) }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)