网站地图    收藏    合作   

主页 > 采坑 > 服务端采坑 > goLang采坑 >

golang中在循环内部执行defer语句

来源:未知    时间:2021-05-03 17:47 作者:小飞侠 阅读:

[导读] defer在函数退出时才能执行, 在for执行defer会导致资源延迟释放: funcmain(){fori:=0;i5;i++{f,err:=os.Open(/path/to/file)iferr!=nil{log.Fatal(err)}deferf.Close()}} 解决的方法可以在for中构造一个局部函数, 在局...

defer在函数退出时才能执行, 在for执行defer会导致资源延迟释放:

func main() {
    for i := 0; i < 5; i++ {
        f, err := os.Open("/path/to/file")
        if err != nil {
            log.Fatal(err)
        }
        defer f.Close()
    }}

解决的方法可以在for中构造一个局部函数, 在局部函数内部执行defer:

func main() {
    for i := 0; i < 5; i++ {
        func() {
            f, err := os.Open("/path/to/file")
            if err != nil {
                log.Fatal(err)
            }
            defer f.Close()
        }()
    }}


自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论