Go语言错误处理,defer问题

发布于 2022-08-24 10:40:13 字数 363 浏览 14 评论 0

package main

import (
	"fmt"
	"os"
)
func main() {
	files, err := os.Open("testqq.txt")
	defer files.Close()
	if err != nil {
		fmt.Printf("Error is:%s", "Game Over!")
		return
	}
}

这段代码简单打开文件"testqq.txt", 此文件根本就不存在的情况下, defer files.Close()会报错。
因为files是nil, 这个代码是不要判断files是否为nil。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋凉 2022-08-31 10:40:13

这个代码你需要这样写,首先判断错误,然后再defer定义

func main() {
        files, err := os.Open("testqq.txt")        
        if err != nil {
                fmt.Printf("Error is:%s", "Game Over!")
                return
        }
        defer files.Close()
    }
蓝颜夕 2022-08-31 10:40:13

defer 表示函数退出的时候执行,
当文件不存在时,open就会报错,肯定就不能执行file close操作,
因此你的file close必须是文件成功打开以后,
写法楼上已经指正了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文