go defer的作用域

总是觉得不去敲出来验证,心里始终有疑问,看到一段代码,主协程里for循环里面defer挂起关闭,是在for结束前关闭还是主协程关闭前执行关闭?

还是对defer理解的不深刻,查查看标准库文档,有没有,于是自己动手丰衣足食:

func main() {

	file, _ := os.OpenFile("d:/t1.txt", os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0754)
	writer := bufio.NewWriter(file)
	for i := 0; i < 10; i++ {
		time.Sleep(1*time.Second)
		if i==5 {
			defer file.Close()//在第五秒挂起关闭
		}
	}

	for i := 0; i < 10; i++ {
		time.Sleep(1*time.Second)
		writer.WriteString(strconv.Itoa(i))
	}
	writer.Flush()

}

代码中,我创建并打开了一个文件,然后用了第一个for循环在第五秒挂起文件的关闭,然后执行写入操作,测试结果,文件中写入1-9。突然又觉得自己多余,defer对自己所在的协程负责,怎么受一个for的影响。

猜你喜欢

转载自blog.csdn.net/ckx178/article/details/88659205