函数function
-Go函数不支持嵌套、重载和默认参数
-但支持以下特性
-无需声明原型、不定长度变参、多返回值、命名返回参数匿名函数、闭包
-定义函数使用关键字func,且左大括号不能另行一行
-函数也可以作为一种类型使用
闭包
<code>
package main
import (
"fmt"
)
func main() {
f := closure(10)
fmt.Println(f(1))
fmt.Println(f(2))
}
func closure(x int) func(int) int {
return func(y int) int {
return x + y
}
}
</code>
defer
-的执行方式类似其它语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行
-即使函数发生严重错误也会执行
-支持匿名函数的调用
-常用于资源清理、文件关闭、解锁以及记录时间等操作
-通过与匿名函数配合可在return之后修改函数计算结果
-如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则则是引用某个 变量的地址
-Go没有异常机制,但有panic/recover 模式来处理错误
-Panic可以在任何地方引发,但revocer只有在defer调用的函数中有效
<code>
package main
import (
"fmt"
)
func main() {
A()
B()
C()
}
func A() {
fmt.Println("Func A")
}
func B() {
defer func() {
if err := recover(); err != nil {
fmt.Println("Recover in B")
}
}()
panic("Panic in B")
}
func C() {
fmt.Println("Func C")
}
</code>