func main() {sum, sub := calc(5, 6, add)fmt.Println(sum, sub)}// 把函数当变量的形式传递过去
func calc(x, y int, op func(int, int) (int, int)) (int, int) {return op(x, y)}func add(x, y int) (int, int) {return x + y, x - y}
返回一个变量值 :
package mainimport "fmt"func main() {sum := calc(5, 6, add)fmt.Println(sum)}// 把函数当变量的形式传递过去
func calc(x, y int, op func(int, int) int) int {return op(x, y)}func add(x, y int) int {return x + y}
内置函数介绍
内置函数 | 介绍 |
---|---|
close | 主要用来关闭channel |
len | 用来求长度,比如string、array、slice、map、channel |
new | 用来分配内存,主要用来分配值类型,比如int、struct。返回的是指针 |
make | 用来分配内存,主要用来分配引用类型,比如chan、map、slice |
append | 用来追加元素到数组、slice中 |
panic和recover | 用来做错误处理 |
panic/recover
Go语言中目前(Go1.12)是没有异常机制,但是使用panic/recover
模式来处理错误。 panic
可以在任何地方引发,但recover
只有在defer
调用的函数中有效。 首先来看一个例子:
func funcA() {fmt.Println("func A")
}func funcB() {defer func() {err := recover()//如果程序出出现了panic错误,可以通过recover恢复过来if err != nil {fmt.Println("recover in B")}}() // 这里()是立即执行匿名函数panic("panic in B")
}func funcC() {fmt.Println("func C")
}
func main() {funcA()funcB()funcC()
}
注意:
recover()
必须搭配defer
使用。defer
一定要在可能引发panic
的语句之前定义。