defer概述 defer xxx() 延时执行,将xxx放在函数的最后执行 多个defer xxx()时,所有defer倒序执行,即最早声明
的defer会最后执行
用途
- (数据库读写,文件读写,网络数据读写)
- 资源=数据库连接,打开的文件对象,网路连接
- 资源开销(CPU,内存,磁盘…)巨大
- 资源,随用随开,用完【即】关
场景
读写数据库,并在程序的最后关闭数据库
1 2 3 4 5 6 7 8
| func demo41() {
fmt.Println("打开数据库")
defer closeDatabase() fmt.Println("愉快地读写数据") fmt.Println("读写完毕") }
|
多个defer时,最早defer的操作最后执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| func demo42() {
fmt.Println("打开数据库") defer closeDatabase()
fmt.Println("读入DB数据")
fmt.Println("打开文件") defer closeFile()
fmt.Println("读入DB数据")
fmt.Println("继续操作数据库")
} func closeDatabase() { fmt.Println("关闭数据库") } func closeFile() { fmt.Println("关闭文件") }
|
其他defer案例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| package main
import "fmt"
func xingzuoZhensuo() { var birthday string fmt.Println("请输入您的生日,例如0823") fmt.Scan(&birthday)
if birthday >= "0823" && birthday <= "0922" { fmt.Println("阁下真乃神人也") } else if birthday >= "0923" && birthday <= "1022" { fmt.Println("阁下是天秤座") } else if birthday >= "1023" && birthday <= "1122" { fmt.Println("阁下是天蝎座") } else if birthday >= "1123" && birthday <= "1222" { fmt.Println("阁下是射手座") } else if (birthday >= "1223" && birthday <= "1231") || (birthday >= "0101" && birthday <= "0122") { fmt.Println("阁下是摩羯座") } else if birthday >= "0123" && birthday <= "0222" { fmt.Println("阁下是水瓶座") } else if (birthday >= "0223" && birthday <= "0229") || (birthday >= "0301" && birthday <= "0322") { fmt.Println("阁下是双鱼座") } else if birthday >= "0323" && birthday <= "0422" { fmt.Println("阁下是白羊座") } else if birthday >= "0423" && birthday <= "0522" { fmt.Println("阁下是金牛座") } else if birthday >= "0523" && birthday <= "0622" { fmt.Println("阁下是双子座") } else if birthday >= "0623" && birthday <= "0722" { fmt.Println("阁下是巨蟹座") } else if birthday >= "0723" && birthday <= "0822" { fmt.Println("阁下是狮子座") } else { fmt.Println("阁下就是传说中的蛇夫座鸭!") }
}
func main071() { fmt.Println("亲爱的患者,欢迎来到我院!") defer fmt.Println("同志再见,我院永远欢迎你!")
xingzuoZhensuo() fmt.Println("事务A") fmt.Println("事务B") fmt.Println("事务C") }
func main() { fmt.Println("亲爱的患者,欢迎来到我院!")
defer fmt.Println("我院永远欢迎你") defer fmt.Println("请这边滚") defer fmt.Println("您的诊断已结束")
xingzuoZhensuo() fmt.Println("事务A") fmt.Println("事务B") fmt.Println("事务C") }
|