Go 语言文件操作:用 defer 关闭文件
关闭文件的思考
假如我们在使用完文件后,不及时关闭,会发生什么?
在使用完文件(io)之后,正确的做法都是应该去关闭它,如果不关闭的话,就会使得程序本身所拥有的文件句柄一直增加,一直增加到某一个值之后,我们会发现程序已经没办法操作更多文件(too many open files),这中情况在web服务程序中稍不留神就出现,所以一定记住,对于文件io,用完一定要关闭。
在什么时机关闭文件比较好
在c语言中,我们常常都是在函数退出的时候去关闭,但是go给我们提供了一个关键字
defer,可以使得我们在获取到文件操作句柄之后,就可以写defer fileHandler.Close(), 这样也不怕写程序写到最后,忘记去关闭文件
浅谈defer
明确defer是在return之后,函数完全退出之前,如果一个代码块内出现多个defer,那么其是满足先进后出(FILO)的执行顺序
func main(){ defer fmt.Println("defer 1") defer fmt.Println("defer 2") defer fmt.Println("defer 3") fmt.Println("defer test") } /*运行结果 defer test defer 3 defer 2 defer 1 */
defer关闭文件
示例代码
func main() {
    fileHandler, err := os.Open("./test.txt")
    if nil != err {
        panic(err)
    }
    //检查完,发现没有错误,就可以关闭使用defer来关闭
    defer func() {
        err := fileHandler.Close()
        if nil != err {
            fmt.Println("defer关闭文件失败:", err)
        } else {
            fmt.Println("defer 关闭文件成功")
        }
    }()
}运行结果
PS D:\GoPractice\fileOpt> go run .\main.go
defer 关闭文件成功 
           Go 社区 Wiki
 Go 社区 Wiki
     
             
             
             关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: