func deferTest(count int) {
if count == 0 {
fmt.Println("count == 0")
return
}
defer fmt.Println("defer")
fmt.Println("end")
}
在main函数调用:
deferTest(0) // 输出 "count==0",没有输出"defer"! 因为没有执行到defer这一句!
deferTest(0) // 输出 "end\n defer"
所以,并不是defer语句一定会执行,而是正常的代码逻辑要走到defer这一句!
所以,一般我们像关闭连接(http这种除外)、wg.done() 等都是放到语句的第一行!