gpt4 book ai didi

go - 错误检查后延迟的放置

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:58 24 4
gpt4 key购买 nike

在Go语言中,经常会看到下面的成语:

func CopyFile(dstName, srcName string) (written int64, err error) {
src, err := os.Open(srcName)
if err != nil {
return
}
defer src.Close()

dst, err := os.Create(dstName)
if err != nil {
return
}
defer dst.Close()

return io.Copy(dst, src)
}

defer 语句出现在错误检查之后有什么原因吗?我的猜测是这样做是为了避免在 err 不是 nil 的情况下取消引用 nil 值。

最佳答案

如果文件 OpenCreate 失败,那么您没有有效的 *File 可以关闭。问题不会是 *Filenil 值,因为 Close() 将检查 nil 并简单地在这种情况下立即返回 - 问题可能是 *File 值非零但无效。由于 os.Open() 的文档没有明确说明对 Open() 的调用失败会为 *File 返回 nil 值,因此您不能依赖它的所有底层实现实际上返回一个 nil 值或将始终返回一个 nil 值..

关于go - 错误检查后延迟的放置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091861/

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