关于Go语言中defer关键字

books1958 · · 3963 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

在Go语言中,defer语句会在该函数结束的时候被调用,即使后面的语句运行时出现异常了defer语句仍然会被执行。

需要注意的是,如果defer语句中引用了参数,则该参数的值将是程序到defer这一行的时候的值,而与后面的语句没有关系。

以下为简单测试:

package main

import "fmt"

func main() {
	func_b_0()
	func_b_1()
	func_b_2()
}

func func_b_0() {
	fmt.Println("func_b_0...top")
	a := 5
	defer fmt.Println("a=", a)
	a++
}
func func_b_1() {
	fmt.Println("func_b_1...top")
	a := 5
	defer func() {
		fmt.Println("a=", a)
	}()
	a++
}
func func_b_2() {
	fmt.Println("func_b_2...top")
	a := 5
	defer func(a int) {
		fmt.Println("a=", a)
	}(a)
	a++
}
输出:

func_b_0...top
a= 5
func_b_1...top
a= 6
func_b_2...top
a= 5


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:books1958

查看原文:关于Go语言中defer关键字

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3963 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传