Golang:一个示例讲明白defer怎么用

Posted 保暖大裤衩LeoLee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Golang:一个示例讲明白defer怎么用相关的知识,希望对你有一定的参考价值。

package main

import "fmt"

func sum(n1 int, n2 int) int 
	defer fmt.Printf("defer: n1=%d\\n", n1)
	defer fmt.Printf("defer: n2=%d\\n", n2)
	n1 += 2
	n2 += 2
	res := n1 + n2
	fmt.Printf("func sum res=%d\\n", res)
	return res


func main() 
	res := sum(1, 2)
	fmt.Printf("func main res=%d\\n", res)

  • defer修饰的语句暂时不会执行,这些语句将会按照顺序被压入一个独立的栈中
  • 当函数执行完毕后,按照栈先进后出的原则出栈并执行
  • 在defer将语句压入栈中时,语句中相关变量的“值拷贝”也一同压入了栈中,所以defer的语句打印出来的n1和n2的值是1和2

输出结果:

func sum res=7
defer: n2=2
defer: n1=1
func main res=7

defer的价值在于,当函数执行完毕后,进行一些资源关闭和回收的“善后”操作

以上是关于Golang:一个示例讲明白defer怎么用的主要内容,如果未能解决你的问题,请参考以下文章

Golang:一个示例讲明白defer怎么用

golang中defer的些许总结

Golang Go语言中的 defer 怎么使用?

Golang入门教程(十三)延迟函数defer详解

golang:defer执行顺序

Golang basic_leaming函数详解