Go 语言文件操作:用 defer 关闭文件 1 个改进

关闭文件的思考

假如我们在使用完文件后,不及时关闭,会发生什么?

在使用完文件(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 关闭文件成功
本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!