golang init函数、defer函数、匿名函数、错误处理

发布时间 2023-08-24 15:41:09作者: 妇愁者纞萌

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)
}