golang init函数、defer函数、匿名函数、错误处理
1. init
每一个源文件都可以包含一个init函数,该函数会在main函数执行前,被Go运行框架调用,也就是说init会在main函数前被调用,当有全局变量跟main函数 init 函数 同时出现的时候 执行的顺序是 全局函数==》init函数==》main函数
package main
import "fmt"
func test() string{
return "hello"
}
func init(){
fmt.Println("init")
}
func main() {
fmt.Println("main")
fmt.Println(test())
}
2.defer
在函数中 经常用于创建资源(比如 数据库的链接 文件句柄 锁 等)为了在函数执行完毕后 及时的释放资源 Go 设计者提供 defer (延时机制)
package main
import "fmt"
func test(a int,b int) int{
defer func() { fmt.Println("a = ", a) }()
defer func() { fmt.Println("b = ", b) }()
println(a+b)
return a+b
}
func main() {
fmt.Println("main:",test(3,5))
匿名函数
Go支持匿名函数,如果我们某个函数只是希望使用一次,可以考虑使用匿名函数,匿名函数也可以实现多次调用
func main() {
res := func(n1 int, n2 int) int {
return n1 + n2
}(10, 20)
fmt.Println(res)
}
4.错误处理
Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理
package main
import "fmt"
func main() {
test()
}
func test() {
defer func() {
err := recover()
if err != nil {
fmt.Println(err)
}
}()
num := 10
num1 := 0
res := num / num1
fmt.Println(res)
}
浙公网安备 33010602011771号