函数的使用
//函数的可变参数,参数数量不固定
//求n个参数的和
func sumfn(x ...int) int{
//此时的x是一个[]int类型
sum := 0
for _,v := range x{
sum +=x
}
return sum
}
//返回多个参数的函数
func calc(x,y int)(sum int, sub int){
sum = x+y
sub = x-y
return
}
自定义类型
// 定义一个calc类型的函数
type calc func(int,int) int
func add(x,y int) int{
return x+y
}
func main(){
var c calc
c = add
fmt.Printf("c的类型:%T", c) // mian.calc
fmt.Printf(c(10,5))//15
f:=add
fmt.Printf("f的类型:%T", f) // func(int,int)int
}
函数作为另外一个函数的参数
func add(x,y int) int{
return x+y
}
func sub(x,y int) int{
return x-y
}
//自定义函数类型
type calcType func(int,int) int
//函数作为参数
func calc(x,y int, op calcType) int{
return op(x,y)
}
func main(){
//求10+5
calc(10,5,add)
//求10-5
calc(10,5,sub)
}
函数作为返回值
匿名函数
import "fmt"
func main() {
//自执行函数
func(){
fmt.Println("test...")
}()
//匿名函数
var fn = func(x,y int) int{
return x * y
}
// 2×3
fn(2,3)
}
函数的闭包
- 闭包是指有权访问另外一个函数作用域的变量的函数.
- 创建闭包的常见方式:在一个函数内创建另外一个函数,通过另外一个函数访问外层函数的局部变量
- 使用闭包作用域内的局部变量不会立即销毁
defer语句
- defer语句延迟处理,并且逆序执行(最后defer的语句,最先执行)
panic/recover处理错误
- panic 可以在任何地方引发,但是recover只有在defer调用的函数中有效
捕获异常
示例:除零异常