package main import "fmt" func exercise1() { fmt.Println("=== 练习1:defer基本用法 ===") // 使用defer,在函数结束时打印"函数结束" defer fmt.Println("函数结束") fmt.Println("函数执行中") } func exercise2() { fmt.Println("\n=== 练习2:defer执行顺序 ===") // 使用多个defer语句,按照1-2-3的顺序声明 // 观察输出的顺序(应该是3-2-1) defer fmt.Print(1) defer fmt.Print(2) defer fmt.Print(3) fmt.Println("正常执行") } func exercise3() int { fmt.Println("\n=== 练习3:defer修改返回值 ===") // 使用具名返回值result // defer函数中将result修改为100 // return返回50 var result int = 100 defer func() { result = 50 }() return result } func exercise4() { fmt.Println("\n=== 练习4:defer参数求值 ===") i := 0 // 使用defer打印i的值 // 注意:defer声明时就对参数求值了 defer fmt.Println(i) i = 10 fmt.Println("修改i为:", i) } func exercise5() { fmt.Println("\n=== 练习5:实际场景 - 模拟资源管理 ===") // 模拟打开资源 resource := "文件句柄" fmt.Println("打开:", resource) // 使用defer在函数结束时关闭资源 defer func() { fmt.Println("关闭:", resource) }() fmt.Println("使用:", resource) } func exercise6() { fmt.Println("\n=== 练习6:defer捕获变量的值 ===") // 使用循环声明多个defer // 每个defer捕获当前i的值并打印 // 提示:使用闭包或立即求值 for i := 1; i <= 3; i++ { defer func(n int) { fmt.Printf("defer输出: %d\n", n) }(i) fmt.Println("循环输出:", i) } } func main() { fmt.Println("=== defer 练习 ===") exercise1() exercise2() fmt.Printf("练习3返回值: %d\n", exercise3()) exercise4() exercise5() exercise6() }