错误实例:

file, err := os.Open("xxx.txt")
defer file.Close()
if err != nil {return err
}

初学者很多这样写,但是这样会报错

file’ may have ‘nil’ or other unexpected value as its corresponding error variable may be not ‘nil’

意思是,file可能是nil,调用close会发生panic。正确的做法:

file, err := os.Open("xxx.txt")
if err != nil {return
}
defer file.Close()

但是通过看源码,发现file实现的close函数,已经对file等于nil的情况做处理返回ErrInvalid了,所以实际是不会发生panic的,但是goland ide提示以上的报错是因为一般情况下,对于在检测err是否不为nil前做close处理确实会发生panic的,因为对象时nil时做调用。

go1.13.7 /Go/src/os/file_unix.go:229

// Close closes the File, rendering it unusable for I/O.
// On files that support SetDeadline, any pending I/O operations will
// be canceled and return immediately with an error.
// Close will return an error if it has already been called.
func (f *File) Close() error {if f == nil {return ErrInvalid}return f.file.close()
}

源码里这种处理,可能是觉得file实现的close是高频调用函数,怕新手在调用时不符合规范而造成panic发生,因此这里做了特殊的处理。

golang defer 关闭文件 报错file may have nil or other unexpected value as its corresponding error相关推荐

  1. 小程序上传文件报错uploadFile:fail url scheme is invalid,uploadFile:fail createUploadTask:fail Error: Invalid

    今天在这里记录一个很蠢的问题. 问题 最近用小程序的上传文件 API(wx.uploadFile) 上传音频,这个 API 说白了就是比 wx.request 多带了个请求头 multipart/fo ...

  2. ffmpeg合并文件报错Unsafe file name Operation not permitted

    ffmpeg合并文件报错 Unsafe file name '/data/hk_sdk/demo/aaa.mp4' /data/hk_sdk/demo/test.txt: Operation not ...

  3. Java使用File类生成文件报错:java.io.FileNotFoundException: C:\... (拒绝访问。)

    今天在手写动态代理的时候使用File类创建文件报错:java.io.FileNotFoundException: C:\... (拒绝访问.) public class Test {public st ...

  4. Windows用scp服务器下载文件报错No file or directionary

    问题描述 在Windows从命令行scp从linux服务器下载文件报错No file or directionary,查找相关的技术文档无果.其他问答里出现的错误基本为终端登录服务器后的下载文件报错, ...

  5. scp远程传输文件报错,不是完整文件,not a regular file

    错误信息: scp远程传输文件报错,不是完整文件,not a regular file -- 不是完整文件 解决办法: 如果传输的是文件 scp 文件路径 主机名:$PWD 如果传输的是文件夹 scp ...

  6. VScode第一行头文件报错,‘iostream‘ file not found

    问题 从一年前开始,我的VScode老是第一行头文件报错'iostream' file not found,不能检查语法错误,但是又能运行代码,能运行出正确结果,就很迷. 作者在这个问题上,每次需要写 ...

  7. ieda ts文件报错_Intellij IDEA就这样配置,快到飞起!

    目录 1.设置maven 2.IDEA 设置代码行宽度 3.IDEA 提示不区分大小写 4.IntelliJ强制更新Maven Dependencies 5.idea的环境配置默认保存位置 6.隐藏不 ...

  8. Linux打开文件报错E325解决方法

    提示:记得点赞加关注哦! 目录 问题描述 原因分析: 解决方案: 问题描述 提示:这里描述linux中遇到的问题: 例如:Linux打开文件报错E325解决方法 E325: ATTENTION Fou ...

  9. 树莓派(Raspberry Pi 3) centos7使用yum命令报错File /usr/bin/yum, line 30 except KeyboardInterrupt, e:...

    使用yum命令报错 File "/usr/bin/yum", line 30 except KeyboardInterrupt, e: ^ SyntaxError: invalid ...

最新文章

  1. 分布式系统的面试题11
  2. php之类,对象(四)加载类及练习题
  3. JavaScript this 关键词
  4. mysql 保留两位小数
  5. 菜单点击展开,超过四个则进行向右滑动显示demo
  6. 数据管理流程,基础入门简介
  7. 会话和连接的区别_websocket和ajax区别,只有这5点不同
  8. find -regex
  9. 【OpenGL】OpenGL帧缓存对象(FBO:Frame Buffer Object)
  10. 美国计算机加音乐专业,史上最全的美国大学音乐学院专业解析
  11. 快速引导滤波python-opencv
  12. ZZNUOJ_C语言1046:奇数的乘积(完整代码)
  13. WIN10下安装SQL SERVER 2017
  14. 用Python搭建一个股票舆情分析系统
  15. 只有极少数人能通过的「超级多任务」测试(文末附测试地址) 1
  16. TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT(2)升级内存
  17. 高中数学,高考压轴三角形难题秒杀技巧(实用干货)
  18. 求链表的倒数第N个节点
  19. 7-2 求玉米亩产量
  20. java8 stream tomap_Java8之Stream流(五)映射流

热门文章

  1. Oracle DBLink的简单运用
  2. 调用ajax后页面为什么会刷新,为什么页面在JQuery ajax调用之后重新加载?
  3. python的主函数如何书写_Python程序的入口在哪里?main函数的恰当写法
  4. 通过阿里云容器服务K8S Ingress Controller实现应用服务的灰度发布
  5. MySQL 5.5单实例 编译安装
  6. loadrunner-4-3报告摘要
  7. python实践3:cursor() — 数据库连接操作
  8. 机器学习中防止过拟合的处理方法
  9. 设置/修改centos上的swap交换分区的方法
  10. PLMN概念和应用设置