网创优客建站品牌官网
为成都网站建设公司企业提供高品质网站建设
热线:028-86922220
成都专业网站建设公司

定制建站费用3500元

符合中小企业对网站设计、功能常规化式的企业展示型网站建设

成都品牌网站建设

品牌网站建设费用6000元

本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...

成都商城网站建设

商城网站建设费用8000元

商城网站建设因基本功能的需求不同费用上面也有很大的差别...

成都微信网站建设

手机微信网站建站3000元

手机微信网站开发、微信官网、微信商城网站...

建站知识

当前位置:首页 > 建站知识

GO语言中Defer如何使用

这篇文章给大家介绍GO语言中Defer如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

创新互联建站作为成都网站建设公司,专注网站建设、网站设计,有关企业网站设计方案、改版、费用等问题,行业涉及成都卫生间隔断等多个领域,已为上千家企业服务,得到了客户的尊重与认可。

defer:调用一个被 defer 的函数时在函数刚要返回之前延迟执行,当函数无论怎样返回,某资源必须释放时,可用这种与众不同、但有效的处理方式。传统的例子包括解锁互斥或关闭文件。

这样延迟一个函数有双重优势:一是你永远不会忘记关闭文件,此错误在你事后编辑函数添加一个返回路径时常常发生。二是关闭和打开靠在一起,比放在函数尾要清晰很多。

/** * Created with IntelliJ IDEA. * To change this template use File | Settings | File Templates. * Name:Defer */package mainimport ( "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") filename := fileurl+"/test.txt" fmt.Println(Contents(filename))}

我们可以更好的利用被延迟执行函数时特点

/** * Created with IntelliJ IDEA. * To change this template use File | Settings | File Templates. * Name:Defer */package mainimport ( "fmt"
)func trace(s string) string { fmt.Println("entering:", s) return s}func un(s string) { fmt.Println("leaving:", s)}func a() { defer un(trace("a")) fmt.Println("in a")}func b() { defer un(trace("b")) fmt.Println("in b") a()}func main() { b()}

关于GO语言中Defer如何使用就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享文章:GO语言中Defer如何使用
链接分享:http://bjjierui.cn/article/pgghdd.html

其他资讯