当前位置: 首页 > news >正文

GO语言---defer关键字

文章目录

  • 基本用法
  • 主要特性
  • 常见用途

defer是Go语言中一个非常有用的关键字,它用于延迟函数的执行,直到包含它的函数返回之前。

基本用法

在函数被退出的时候执行defer后面的内容。

func main() {defer fmt.Println("world")fmt.Println("hello")
}
// 输出:
// hello
// world

主要特性

1、延迟执行:defer语句会将函数调用推入一个栈中,当外层函数返回时,这些调用会按照后进先出(LIFO)的顺序执行。

2、参数立即求值:defer语句中的参数会在声明时立即求值,而不是在函数执行时。

func main() {i := 1defer fmt.Println("Deferred print:", i)i++fmt.Println("Normal print:", i)
}
// 输出:
// Normal print: 2
// Deferred print: 1

3、栈式执行:多个defer语句会按照后进先出的顺序执行。

func main() {defer fmt.Println("first")defer fmt.Println("second")defer fmt.Println("third")
}
// 输出:
// third
// second
// first

常见用途

1、资源清理:如关闭文件、解锁互斥锁等。

func readFile(filename string) (string, error) {f, err := os.Open(filename)if err != nil {return "", err}defer f.Close() // 确保文件会被关闭// 读取文件内容...
}

2、错误处理:可以与命名返回值结合使用。

func doSomething() (err error) {defer func() {if err != nil {// 错误处理逻辑log.Printf("doSomething failed: %v", err)}}()// 函数逻辑...
}

3、性能测量:

func slowOperation() {defer func(start time.Time) {log.Printf("slowOperation took %v", time.Since(start))}(time.Now())// 耗时操作...
}

相关文章:

  • GO语言---匿名函数
  • scanf 读取字符串
  • 高压接地电阻柜组装前的准备工作
  • 容器里有10升油,现在只有两个分别能装3升和7升油的瓶子,需要将10 升油等分成2 个5 升油。程序输出分油次数最少的详细操作过程。
  • 【Unity】使用 C# SerialPort 进行串口通信
  • Docker容器中运行OpenMPI并行程序, 参数调优
  • 虚拟内存优化:从原理到实战的全方位解析(工具版)
  • 静态变量详解(static variable)
  • uni-app项目实战笔记8--个人中心页面搭建
  • 现代Android开发:轻量级协程框架设计与实践
  • 设计模式汇总
  • 通达信跟老庄追涨停指标公式
  • [k8s]--exec探针详细解析
  • java 设计模式_行为型_17观察者模式
  • 如何设计幂等性接口防止Seata事务悬挂?
  • AJAX——前后端传输数据场景下使用的技术
  • 基于Docker编译运行orb-slam2_with_semantic_labelling
  • C# 枚 举(枚举)
  • [nginx]反向代理grpc
  • [技巧] 接口优化技巧合集
  • 网站开发和推广的不同/军事新闻 今日关注
  • 网站关键词引流/优化网站排名费用
  • 可以做c 试题的网站/新闻近期大事件
  • 眉山网站建设公司/培训网站模板
  • 网站建设分析/北京网络优化推广公司
  • 上海地区网站开发公司/北京网站优化多少钱