Go- defer

版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/3c746afa2f869d0e1f83a5573】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。

Go 学习笔记,学习内容《Go入门指南》
主要介绍以下内容:
defer 的作用
逆序执行多个被注册的 defer
常用的收尾工作
代码追踪
记录函数的参数和返回值
代码示例可以直接运行
package main
import ( "fmt" "io" "log")
func main() {
/* defer的作用 */ func1() // func2最后执行
/* 多个defer被注册,逆序执行 */ for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) // 输出:4 3 2 1 0 而且该语句会在main函数退出之前最后调用 }
/* 常见的收尾操作 文件关闭、解锁、数据库断开连接、打印最终报告 */
/* 代码追踪 */ a() /* 输出: Entering: a in a Entering: b in b Leaving: b Leaving: a */
/* 记录函数的参数和返回值 */ foo("Guess What")}
func func1() { fmt.Println("func1 top") defer func2() fmt.Println("func1 bottom")}
func func2() { fmt.Println("func2")}
func trace(s string) { fmt.Println("Entering:", s) }func untrace(s string) { fmt.Println("Leaving:", s) }
func a() { trace("a") defer untrace("a") fmt.Println("in a") b()}
func b() { trace("b") defer untrace("b") fmt.Println("in b")}
func foo(s string) (n int, err error) { defer func() { // 定义一个匿名函数,并且调用 log.Printf("Call: foo(%q), Ret: %d, %v", s, n, err) // 输出:2021/08/24 17:06:24 Call: foo("Guess What"), Ret: 666, EOF }()
return 666, io.EOF}版权声明: 本文为 InfoQ 作者【HelloBug】的原创文章。
原文链接:【http://xie.infoq.cn/article/3c746afa2f869d0e1f83a5573】。
本文遵守【CC BY-NC-ND】协议,转载请保留原文出处及本版权声明。
还未添加个人签名 2018.09.20 加入
还未添加个人简介

促进软件开发及相关领域知识与创新的传播
京公网安备 11010502039052号


评论