gpt4 book ai didi

go - 多个延迟与延迟匿名函数

转载 作者:IT老高 更新时间:2023-10-28 13:04:18 26 4
gpt4 key购买 nike

发出多个依赖于顺序的 defer 语句,还是延迟一个封装逻辑的匿名函数更安全或更习惯?

例子:

defer os.Remove(tempFile.Name())
defer tempFile.Close()

在上面的例子中,语法是最小的,但是延迟的顺序与要执行的逻辑相反。

在下面的例子中,行数更多,“语法”更多,但逻辑顺序更自然:

defer func() {
tempFile.Close()
os.Remove(tempFile.Name())
}()

使用哪一个?

最佳答案

在此示例中,匿名函数更易于阅读,尤其是在添加错误处理后。

f, err := ioutil.TempFile("", "prefix")
if err != nil {
log.Println("creating temp file:", err)
return
}
defer func() {
err := f.Close()
if err != nil {
log.Println("close:", err)
}
err = os.Remove(f.Name())
if err != nil {
log.Println("remove:", err)
}
}()

如果你有多个资源,那么多个defer一般比较合适。

关于go - 多个延迟与延迟匿名函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32541870/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com