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) }
标签:defer,函数,fmt,init,func,Println,错误处理,main From: https://www.cnblogs.com/fczlm/p/17654284.html