写点什么

Go- defer

用户头像
HelloBug
关注
发布于: 1 小时前
Go- defer

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


发布于: 1 小时前阅读数: 2
用户头像

HelloBug

关注

还未添加个人签名 2018.09.20 加入

还未添加个人简介

评论

发布
暂无评论
Go- defer