GO语言Defer用法实例分析
本篇章节讲解GO语言Defer用法。分享给大家供大家参考。具体分析如下: defer:调用一个被 defer 的函数时在函数刚要返回之前延迟执行,当函数无论怎样返回,某资源必须释放时,可用这种与众不同、但有效的处理方式。传统的例子包括解锁互斥或关闭文件。 这样延迟一个函数有双重优势:一是你永远不会忘记关闭文件,此错误在你事后编辑函数添加一个返回路径时常常发生。二是关闭和打开靠在一起,比放在函数尾要清晰很多。 复制代码 代码如下: /**
* Created with IntelliJ IDEA. * To change this template use File | Settings | File Templates. * Name:Defer */ package main import ( "fmt" "os" "log" "io" ) //将文件内容作为一个字符串返回 func Contents(filename string) (string) { //打开文件 f,err := os.Open(filename) if err != nil { log.Printf("%s",err) } fmt.Println("Close前>",f) // 如果f.Close在这里执行时就完了。所以用DEFER延时执行 // 他应该会在f.Read()接收完后执行 (我个人理解) defer f.Close() fmt.Println("Close后>",f) var result []byte buf := make([]byte,100) for { n,err := f.Read(buf[0:]) result = append(result,buf[0:n]...) if err != nil { if err == io.EOF { break } log.Printf("未接收完关闭了f>%s",err) // 如果f提前关闭了,打印 } } return string(result) } func main() { fileurl := os.Getenv("HOME") 我们可以更好的利用被延迟执行函数时特点 复制代码 代码如下: /**
* Created with IntelliJ IDEA. * To change this template use File | Settings | File Templates. * Name:Defer */ package main import ( "fmt" ) 希望本文所述对大家的Go语言程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |