golang defer

复制代码
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
}
复制代码

 

posted @   潇潇暮鱼鱼  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示