golang defer使用的坑

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() 等都是放到语句的第一行!

猜你喜欢

转载自blog.csdn.net/qq_43778308/article/details/115434309