首页 > 其他分享 >golang defer

golang defer

时间:2023-02-07 10:14:31浏览次数:38  
标签:defer res fmt golang n1 n2 执行

package main

import (
    "fmt"
)

//defer的最佳实践是,当函数执行完毕后,可以及时的释放函数创建的资源
//在前面先写defer file.close(),先把defer压入栈不执行,先执行后面的代码,在整个test函数执行完毕后再执行这个defer中关闭文件的操作
//程序员可以不用在关注什么时候应当关闭资源了。在函数完成后悔根据defer语句自动关闭资源
//func test() {
//    //关闭文件资源
//    file = os.OpenFile(文件名)
//    defer file.close()
//    //其他代码
//}

func sum(n1 int, n2 int) int {
    //当执行到defer时,会将defer后面的语句压入独立的栈(defer栈)
    //当当前函数执行完毕后,再从defer栈,按照先入后出的方式出栈,执行
    //在defer将语句放入栈时,也会将相关的值拷贝同时入栈,后面再有值改变如n1++,不会影响defer中的变量n1的值
    defer fmt.Println("n1=", n1) //3.先入栈,后出.n1=10
    defer fmt.Println("n2", n2)  //2.后入栈,先出.n2=2
    n1++                         //n1 = 11
    n2++                         //n2 = 21
    res := n1 + n2               //res = 32
    fmt.Println("res=", res)     //1. 打印res = 32
    return res
}
func main() {
    res := sum(10, 20)
    fmt.Println("res-1=", res) //4.返回主函数最后执行。接收res-1 = 32
}

 

标签:defer,res,fmt,golang,n1,n2,执行
From: https://www.cnblogs.com/xiaoxiaomuyuyu/p/17097423.html

相关文章

  • (转)go语言-golang基础-queue队列和stack堆栈
    原文:https://www.cnblogs.com/malukang/p/12708850.html1.queue队列队列(queue),是一种FIFO(FirstInFirstOut)先进先出的线性表。通常用数据或者链表来实现队列。队......
  • 【转】Is there a better dependency injection pattern in golang?
     https://coolshell.cn/articles/9949.html https://dotblogs.com.tw/daniel/2018/01/17/140435 https://github.com/golobby/container https://blog.drewolson.......
  • (转)「Golang」for range 使用方法及避坑指南
    原文:https://blog.csdn.net/qq_37005831/article/details/114296008前言循环控制结构是一种在各种编程语言中常用的程序控制结构,其与顺序控制结构、选择控制结构组成了程......
  • (转)golang-标准库(math/rand)
    原文:https://itpika.com/2019/07/09/go/library-math-rand/rand包是go提供用来产生各种各样随机数的包,本文对这些产生随机数的方法做一下介绍。注意:rand生成的数值虽然说......
  • (转)深入golang -- select
    原文:https://zhuanlan.zhihu.com/p/509148906老规矩相信大家已经知道select应用的特性,这里主要是介绍select的底层原理。select底层原理主要分为两部:select语句......
  • (转)golang学习之--select--case 原理
    原文:https://blog.csdn.net/cyb_17302190874/article/details/108244683Go的select语句是一种仅能用于channl发送和接收消息的专用语句,此语句运行期间是阻塞的;当select中......
  • golang的闭包
    funcAddUpper()myFun{//闭包:返回的函数与这个函数引用到函数外的变量n形成一个整体,共同生成闭包,反复调用f1函数即AddUpper函数,n只初始化一次,所以返回的值的累加的......
  • (转)golang常用库之-标准库 sync包| go语言如何实现单例模式、读写锁(sync.RWMutex)
    原文:https://blog.csdn.net/inthat/article/details/124218961golang常用库之-标准库sync包Golangsync包提供了基础的异步操作方法,包括互斥锁Mutex,执行一次Once和并发等......
  • (转)深入浅出Golang Runtime
    原文:https://www.cnblogs.com/lovezbs/p/14467801.html本文为腾讯NOW直播研发工程师郝以奋在8月19日深圳GopherMeetup上的分享,以下为根据PPT进行的详细注解。介绍......
  • (转)Golang标准库——runtime
    原文:https://www.jianshu.com/p/c1b6de70c004runtimeruntime包提供和go运行时环境的互操作,如控制go程的函数。它也包括用于reflect包的低层次类型信息;参见》reflect报......