1 回答

TA贡献1868条经验 获得超4个赞
"defer" 语句调用一个函数,该函数的执行被推迟到周围函数返回的那一刻,因为周围函数执行了一个 return 语句,到达了它的函数体的末尾,或者因为相应的 goroutine 处于恐慌状态。
每次执行“defer”语句时,函数值和调用的参数都会像往常一样评估并重新保存,但不会调用实际的函数。相反,在周围函数返回之前立即调用延迟函数,以与它们延迟的相反顺序调用。如果延迟函数值计算为 nil,则在调用函数时执行会出现混乱,而不是在执行“延迟”语句时。
例如,如果延迟函数是函数文字,并且周围的函数具有在文字范围内的命名结果参数,则延迟函数可以在返回结果参数之前访问和修改结果参数。如果延迟函数有任何返回值,则在函数完成时将其丢弃。
func OpenOutputFile(name string) (fp *os.File) {
fp, err := os.Create(name)
if err != nil {
panic(err)
}
defer func() {
if err := fp.Close(); err != nil {
panic(err)
}
}()
return fp
}
你打开文件
fp, err := os.Create(name)
你关闭文件
err := fp.Close()
之后Close,fp不再指向有效的文件描述符。
- 1 回答
- 0 关注
- 288 浏览
添加回答
举报