美文网首页
go defer延时机制

go defer延时机制

作者: StevenQin | 来源:发表于2019-03-01 10:54 被阅读0次

在函数中,程序员经常需要创建资源(比如:数据库连接,文件句柄,锁等),为了在函数执行完结后,及时的释放资源,Go提供了defer(延时机制)

//当执行到defer时,暂时不执行,会将defer后面的语句压入到独立的栈(defer栈)
//当函数执行完结后,再从defer栈,按照先入后出的方式出栈,执行
func sum(n1 int, n2 int) int {
    defer fmt.Println("ok1 n1=", n1) //3.ok1 n1=10
    defer fmt.Println("ok2 n2=", n2) //2.ok2 n2=20
    res := n1 + n2
    fmt.Println("ok3 res=", res) // 1.ok3 res =30
    return res
}

func main() {
    res := sum(10, 30)
    fmt.Println("ok4 res=", res) //4.ok4 res=30
}

细节说明

1、当执行到defer时,暂时不执行,会将defer后面的语句压入到独立的栈(defer栈)
2、当函数执行完结后,再从defer栈,按照先入后出的方式出栈,执行
3、在defer语句压入栈时,也会有相关的值拷贝到栈

package main
import (
    "fmt"
)
//当执行到defer时,暂时不执行,会将defer后面的语句压入到独立的栈(defer栈)
//当函数执行完结后,再从defer栈,按照先入后出的方式出栈,执行
func sum(n1 int, n2 int) int {
    defer fmt.Println("ok1 n1=", n1) //3.ok1 n1=10
    defer fmt.Println("ok2 n2=", n2) //2.ok2 n2=20
    n1++                             //n1=11
    n2++                             //n2=21
    res := n1 + n2
    fmt.Println("ok3 res=", res) // 1.ok3 res =32
    return res
}
func main() {
    res := sum(10, 30)

    fmt.Println("ok4 res=", res) //4.ok4 res=32
}
  • defer最主要的价值是:在函数执行完之后释放函数创建的资源

相关文章

  • go defer延时机制

    在函数中,程序员经常需要创建资源(比如:数据库连接,文件句柄,锁等),为了在函数执行完结后,及时的释放资源,Go提...

  • Go语言学习笔记08.defer

    defer defer可以说是go的一个很牛逼的功能了,将函数暂存,延时执行。defer语句只能出现在函数或方法的...

  • golang语言defer特性详解.md

    [TOC] golang语言defer特性详解 defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让...

  • go/defer

    defer使用 defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(包括通...

  • 一文了解defer操作

    什么是defer? defer是go语言提供的一种用于注册延迟调用的机制,让函数或语句可以在当前函数执行完毕后(包...

  • go defer温柔陷阱

    一、什么是defer? defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后...

  • GO语言学习笔记5-defer的使用

    1.什么是defer defer是Go语言提供的一种用于注册延迟调用的机制:让函数或语句可以在当前函数执行完毕后(...

  • golang异常处理机制panic-defer-recover

    Go中的Exception处理采用什么机制? 一句话总结: Go中可以抛出一个panic的异常,然后在defer中...

  • golang defer 特性

    defer.go

  • 使用 ScopeGuard 让代码更加安全可靠

    ScopeGuard用于实现Go语言中defer的功能。其主要思想和ScopeLock类似,即利用C++栈展开机制...

网友评论

      本文标题:go defer延时机制

      本文链接:https://www.haomeiwen.com/subject/iagruqtx.html