init函数defer函数
356字约1分钟
2025-02-03
init函数
init()函数是一个特殊的函数,存在以下特性:
- 不能被其他函数调用,而是在main函数执行之前,自动被调用
- init函数不能作为参数传入
- 不能有传入参数和返回值
一个go文件可以有多个init函数,谁在前面谁就先执行
package main
import "fmt"
func init() {
  fmt.Println("init1")
}
func init() {
  fmt.Println("init2")
}
func init() {
  fmt.Println("init3")
}
func main() {
  fmt.Println("main")
}执行顺序
init1
init2
init3
maindefer函数
defer是Go语言中的一个关键字,用于在函数返回前执行一段代码。这在需要清理资源或执行一些后台任务时非常有用。
- 关键字 defer 用于注册延迟调用
- 这些调用直到 return 前才被执。因此,可以用来做资源清理
- 多个defer语句,按先进后出的方式执行,谁离return近谁先执行
- defer语句中的变量,在defer声明时就决定了
package main
import "fmt"
func Func() {
  defer fmt.Println("defer2")
  fmt.Println("func")
  defer fmt.Println("defer1")
}
func main() {
  defer fmt.Println("defer4")
  Func()
  defer fmt.Println("defer3")
}执行顺序
func
defer1
defer2
defer3
defer4package main
import (
    "fmt"
    "time"
)
func main() {
    // 使用defer语句在函数返回前打印"清理资源"
    defer fmt.Println("清理资源")
    // 执行一些操作
    fmt.Println("执行操作")
    time.Sleep(2 * time.Second) // 模拟耗时操作
    panic("发生错误")
}