为什么defer要放到err后面?

fileObj, err := os.Open("test.txt")

if err != nil {
    
    
	fmt.Printf("打开文件失败,err: %v\n", err)
	return
	}
//文件延迟关闭,要放在处理err后面
defer fileObj.Close()

如果放到err前面, 当err发生时, 还会执行defer,此时 fileObj为空指针, 会报错
如果放到err后面, 当err发生, 直接就return了, 不会执行下面的defer

猜你喜欢

转载自blog.csdn.net/leptobo/article/details/126412828