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

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())// 耗时操作...
}
http://www.xdnf.cn/news/14133.html

相关文章:

  • 借助nginx实现自动获取本机IP
  • 【设计模式】单例模式
  • C# 中的Async 和 Await 的用法详解
  • 【leetcode】169. 多数元素
  • 傅里叶变换的基本思想通俗解释与应用介绍
  • 组件传值的两种用法(父传子)
  • MACD指标
  • 人工智能学习26-BP梯度下降
  • 三菱FX-5U系列入门到精通
  • 代码随想录12|翻转单词|右旋字符串|实现strStr()|重复的子字符串
  • LLMOps——Langfuse
  • 低温对FPGA的核心影响
  • 山东大学软件学院WEB数据管理 复习串讲笔记(2025)
  • 使用 C# 源生成器(Source Generators)进行高效开发:增强 Blazor 及其他功能
  • Git命令与代码仓库管理
  • 皮卡丘靶场通关全教程
  • 中医穴位学习工具推荐,专业经络穴位图解
  • 【Linux】Linux多路复用-poll
  • Redis的list的底层原理
  • java快速打包bat 电脑直接运行 无需从新配置环境
  • C#入门学习笔记 #9(析构器、类声明、访问控制、继承、重写、多态、抽象类、开闭原则)
  • Python惰性函数与技术总结-由Deepseek产生
  • 【零散技术】5分钟完成Odoo18 登陆页面全自定义
  • 50天50个小项目 (Vue3 + Tailwindcss V4) ✨ | AnimatedNavigation(动态导航)
  • 打破长推理迷思:基于困惑度的自适应推理如何实现效率与精度的双赢
  • python训练营day52
  • 【YOLO 系列】基于YOLO的车载摄像头道路标志和车辆目标检测识别系统【python源码+Pyqt5界面+数据集+训练代码】
  • 茶文化部分答案
  • 在docker中部署ollama
  • Linux下成功编译CPU版Caffe的保姆级教程(基于Anaconda Python3.8 包含完整可用Makefile.config文件)