golang defer 关闭文件 报错file may have nil or other unexpected value as its corresponding error
错误实例:
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相关推荐
- 小程序上传文件报错uploadFile:fail url scheme is invalid,uploadFile:fail createUploadTask:fail Error: Invalid
今天在这里记录一个很蠢的问题. 问题 最近用小程序的上传文件 API(wx.uploadFile) 上传音频,这个 API 说白了就是比 wx.request 多带了个请求头 multipart/fo ...
- 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 ...
- Java使用File类生成文件报错:java.io.FileNotFoundException: C:\... (拒绝访问。)
今天在手写动态代理的时候使用File类创建文件报错:java.io.FileNotFoundException: C:\... (拒绝访问.) public class Test {public st ...
- Windows用scp服务器下载文件报错No file or directionary
问题描述 在Windows从命令行scp从linux服务器下载文件报错No file or directionary,查找相关的技术文档无果.其他问答里出现的错误基本为终端登录服务器后的下载文件报错, ...
- scp远程传输文件报错,不是完整文件,not a regular file
错误信息: scp远程传输文件报错,不是完整文件,not a regular file -- 不是完整文件 解决办法: 如果传输的是文件 scp 文件路径 主机名:$PWD 如果传输的是文件夹 scp ...
- VScode第一行头文件报错,‘iostream‘ file not found
问题 从一年前开始,我的VScode老是第一行头文件报错'iostream' file not found,不能检查语法错误,但是又能运行代码,能运行出正确结果,就很迷. 作者在这个问题上,每次需要写 ...
- ieda ts文件报错_Intellij IDEA就这样配置,快到飞起!
目录 1.设置maven 2.IDEA 设置代码行宽度 3.IDEA 提示不区分大小写 4.IntelliJ强制更新Maven Dependencies 5.idea的环境配置默认保存位置 6.隐藏不 ...
- Linux打开文件报错E325解决方法
提示:记得点赞加关注哦! 目录 问题描述 原因分析: 解决方案: 问题描述 提示:这里描述linux中遇到的问题: 例如:Linux打开文件报错E325解决方法 E325: ATTENTION Fou ...
- 树莓派(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 ...
最新文章
- 分布式系统的面试题11
- php之类,对象(四)加载类及练习题
- JavaScript this 关键词
- mysql 保留两位小数
- 菜单点击展开,超过四个则进行向右滑动显示demo
- 数据管理流程,基础入门简介
- 会话和连接的区别_websocket和ajax区别,只有这5点不同
- find -regex
- 【OpenGL】OpenGL帧缓存对象(FBO:Frame Buffer Object)
- 美国计算机加音乐专业,史上最全的美国大学音乐学院专业解析
- 快速引导滤波python-opencv
- ZZNUOJ_C语言1046:奇数的乘积(完整代码)
- WIN10下安装SQL SERVER 2017
- 用Python搭建一个股票舆情分析系统
- 只有极少数人能通过的「超级多任务」测试(文末附测试地址) 1
- TP-Link WR703N升级64M内存+外接SMA天线+刷OpenWRT(2)升级内存
- 高中数学,高考压轴三角形难题秒杀技巧(实用干货)
- 求链表的倒数第N个节点
- 7-2 求玉米亩产量
- java8 stream tomap_Java8之Stream流(五)映射流