首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
误用短声明导致变量覆盖
误用字符串
发生错误时使用defer关闭一个文件
不需要将一个指向切片的指针传递给函数
使用指针指向接口类型
使用值类型时误用指针
误用协程和通道
闭包和协程的使用
糟糕的错误处理
关于逗号ok模式
defer 模式
可见性模式
运算符模式和接口
字符串
数组和切片
映射
结构体
接口
函数
文件
协程(goroutine)与通道(channel)
网络和网页应用
其他
出于性能考虑的最佳实践和建议
项目简介
短网址项目简介
数据结构和前端界面
用户界面:web 服务端
添加持久化存储
添加协程
用 JSON 持久化存储
分布式程序
使用代理缓存
总结和增强
什么是 Google App Engine?
云上的 Go
安装 Go App Engine SDK:为 Go 部署的开发环境
建造你自己的 Hello world 应用
使用用户服务和探索其 API
处理窗口
使用数据存储
上传到云端
Heroku:一个使用 Go 的高度可用一致数据存储
MROffice:一个使用 Go 的呼叫中心网络电话 (VOIP) 系统
Atlassian:一个虚拟机群管理系统
Camilistore:一个可寻址内容存储系统
Go 语言的其他应用
当前位置:
首页>>
技术小册>>
go编程权威指南(四)
小册名称:go编程权威指南(四)
如果你在一个 `for` 循环内部处理一系列文件,你需要使用 `defer` 确保文件在处理完毕后被关闭,例如: ```go for _, file := range files { if f, err = os.Open(file); err != nil { return } // 这是错误的方式,当循环结束时文件没有关闭 defer f.Close() // 对文件进行操作 f.Process(data) } ``` 但是在循环内结尾处的 `defer` 没有执行,所以文件一直没有关闭!垃圾回收机制可能会自动关闭文件,但是这会产生一个错误,更好的做法是: ```go for _, file := range files { if f, err = os.Open(file); err != nil { return } // 对文件进行操作 f.Process(data) // 关闭文件 f.Close() } ``` **`defer` 仅在函数返回时才会执行,在循环内的结尾或其他一些有限范围的代码内不会执行。**
上一篇:
误用字符串
下一篇:
不需要将一个指向切片的指针传递给函数
该分类下的相关小册推荐:
深入浅出Go语言核心编程(七)
Go开发权威指南(上)
go编程权威指南(一)
深入浅出Go语言核心编程(一)
深入浅出Go语言核心编程(二)
深入浅出Go语言核心编程(四)
深入浅出Go语言核心编程(八)
企业级Go应用开发从零开始
Go Web编程(上)
Golang修炼指南
go编程权威指南(二)
WebRTC音视频开发实战