函数
注:函数不能嵌套,但匿名函数可以嵌套在函数中
函数声明
// 函数声明
func functionName(paraName type, paraName type, ...)(returnName type, returnName type, ...){}
// eg:
func Add(x int, y int)(z int){
z = x + y
return
}
函数多个形参名或返回值的类型相同时,可以一起声明。
func functionName(a, b, c int, d, e, f string){
do something
}
函数传递参数时,必须按照形参的顺序依次传递。
切片(slice)、字典(map)、通道(channel)、接口(interface)这些传递的都是指针。
声明传递指针的形参
func funcName(a *type) int {
do something
}
对于Go而言,传递参数时,均是值拷贝,区别是拷贝的是值还是指针。
传递变长参数
若函数的最后一个形参采用 arg … type 的形式,那么这个函数就可以处理变长参数。变长参数能够以索引的形式读取数据。变长参数存储可以理解为数组。
func funcName(arg ...type)(return list){
do something
return
}
// eg:
func myFunction(s ...int)(a int){
do something
return
}
函数作为参数
函数可以作为其他函数的参数,然后在其他函数中调用,这叫回调。
// 回调实例
package main
import "fmt"
func main(){
callBack(Add)
}
func Add(a int, b int){
fmt.Printf("The sum of %d and %d is :%d", a, b, a + b)
}
func callBack(f func(int, int)){
f(2, 3)
}
匿名函数
匿名函数是指没有定义名字符号的函数。
func(param list)(return list){
return ...
}
//eg:
func(a, b int) int{
return a + b
}
匿名函数可以直接调用、可以赋值给变量、可以作为返回值、可以作为函数的参数。
defer关键字
defer关键字作用是将某一语句推迟到函数返回之前执行。