Go语言中 的 defer 语句

  1. 在Go语言中,defer语句用于延迟执行一个函数,直到包含该defer语句的函数执行完毕。

示例:

package main

import (

"fmt"

"os"

)

func main() {

// 1. 打开文件

file, err := os.Open("test.txt")

if err != nil {

fmt.Println("打开文件失败:", err)

return

}

=========================================

func slowFunction() {

// 在函数开始时记录时间

start := time.Now()

// 用 defer 在函数退出时自动计算耗时

defer func() {

fmt.Printf("函数执行耗时: %v\n", time.Since(start))

}()

// 模拟耗时操作

time.Sleep(2 * time.Second)

}

// 2. 延迟执行:确保文件一定会被关闭!

defer file.Close()

// 3. 读取文件内容(示例)

data := make(\[\]byte, 100)

count, err := file.Read(data)

if err != nil {

fmt.Println("读取文件失败:", err)

return

}

fmt.Printf("读取了 %d 字节: %s\n", count, string(data:count))

// 4. 此处函数结束,自动执行 defer file.Close()

}

  1. 执行defer语句的执行顺序是后进先出(LIFO),即最后一个defer语句最先执行。多个 defer逆序执行

示例:

func example1() {

fmt.Println("开始")

defer fmt.Println("延迟执行") // 这行最后执行

fmt.Println("结束")

// 输出:

// 开始

// 结束

// 延迟执行

}

  1. defer的函数参数在声明时就被计算并固定

示例:

func example3() {

x := 10

defer fmt.Println("x =", x) // 此时 x=10 已被固定

x = 20

// 输出:x = 10

}

相关推荐
IvanCodes4 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
步行cgn5 小时前
Spring c 命名空间注入详解
java·后端·spring
明月_清风5 小时前
Maven 到底是什么?一篇文章搞懂 Java 项目构建与依赖管理
java·后端·maven
明月_清风5 小时前
AI 越来越强,程序员真正的价值到底是什么?
人工智能·后端
aramae5 小时前
MySQL复合查询(8)
java·c语言·开发语言·后端·算法
Rain的Java大神之路6 小时前
如何快速上传10G文件
java·spring boot·redis·后端·mysql·spring cloud·面试
码事漫谈7 小时前
别再跟AI说“请”了,它根本不 care——但有个东西它超在意
后端
qq_2518364578 小时前
springboot vue3 开发实现 拼豆管理系统
java·开发语言·ai编程
郑州光合科技余经理9 小时前
同城外卖小程序开发:下单成功后,后台导出能不能对上用户端状态
开发语言·前端·git·后端·uni-app·php·ai编程
知识分享小能手9 小时前
C++ 学习教程,从入门到精通,C++ 入门知识 — 完整知识点(1)
开发语言·c++·学习