• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    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")
     filename := fileurl+"/test.txt"
     fmt.Println(Contents(filename))
    }

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

    复制代码 代码如下:
    /**
     * Created with IntelliJ IDEA.
     * To change this template use File | Settings | File Templates.
     * Name:Defer
     */
    package main
    import (
     "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语言程序设计有所帮助。

    您可能感兴趣的文章:
    • Go语言中的延迟函数defer示例详解
    • 总结Go语言中defer的使用和注意要点
    • GO语言延迟函数defer用法分析
    • Go语言defer语句的三种机制整理
    上一篇:GO语言获取系统环境变量的方法
    下一篇:Go语言操作redis用法实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    GO语言Defer用法实例分析 语言,Defer,用法,实例分析,