一、函数定义
函数是结构化编程中最小的模块单元,日常开发过程中,将复杂的算法过程分解为若干个小任务(代码块),使程序的结构性更清晰,程序可读性提升,易于后期维护和让别人读懂你的代码。
编写多个函数的主要目的是将一个需要很多行代码的复杂问题分解为一系列简单的任务(那就是函数)来解决。在实际编程中,我们把重复性的任务抽象成一个函数。
和所有的编程语言一样,Go语言支持各种风格的函数。在Go语言中,当函数执行到代码块最后一行 } 之前或者 return 语句的时候会退出,其中 return 语句可以带有零个或多个参数;这些参数将作为返回值供调用者使用。简单的 return 语句也可以用来结束 for 死循环,或者结束一个Go协程(goroutine)。
二、声明
1、基本结构
package main
func main(入参1 入参类型,入参2 入参类型...)(出参1 出参类型,出参2 出参类型...){
函数体 // do somthing
//一点要return出参 符合出参类型且入参一定要使用
}
//例如
func albert(a int ,b string)(ret_a int,ret_b string){
ret_a = a
ret_b = b
return
}
func 小写开头是私有方法,大写开头是公用(外部可调用)
2、匿名函数
package main
func main(){
//匿名函数
b := func(data1 string){
fmt.Println(data1)
}
b('我是匿名函数')
}
func 中不能嵌套func,但是匿名函数可以。
3、不定参数
package main
func main(){
mo(666,"1","2","3","4")
}
func main(){
//传入切片
ar :=[]string{"1","2","3","4"}
mo(666,ar...)
}
func mo(data1 int,data2 ...string){
fmt.Println(data1,data2)
for k,v:= range data2{
fmt.Println(k,v)
}
}
//输出结果
//666 [1 2 3 4]
//0 1
//1 2
//2 3
//3 4
注意点:
1)关键字 func 用来声明一个函数 funcName;
2)函数可以有一个或者多个参数,每个参数后面带有类型,多个参数之间通过“,”分割;
3)函数可以返回多个值;
4)上面返回值声明了两个变量 ret_a和 ret_b,如果不想声明也可以,直接就两个类型;
5)如果只有一个返回值且不声明返回值变量,那么你可以省略,包括返回值的括号;
6)如果没有返回值,那么就直接省略最后的返回信息;
7)如果有返回值, 那么必须在函数的外层添加return语句;
三、特殊函数
1、自执行函数
package main
func main(){
//自执行函数
(func(){
fmt.Println('自动执行中....')
})()
}
2、闭包函数
package main
func main(){
//调用
mo()(4)
}
func mo()func(int){
return func(num int){
fmt.Println('闭包函数',num)
}
}
//运行结果
闭包函数 4
//注意,闭包的func和return的func需一致
3、延迟调用函数
关键字: defer
package main
import fmt
func main(){
defer mo()
fmt.Println(1)
fmt.Println(2)
fmt.Println(3)
}
func mo(){
fmt.Println('我要最先打印!!!')
}
//运行结果
1
2
3
我要最先打印!!!