Golang 教程
Golang 控制语句
Golang 函数 & 方法
Golang 切片 & 数组
Golang 结构体
Golang 字符串
Golang 接口
Golang 指针
Golang 并发
Golang 异常(Error)
Golang 其他杂项

Go Defer关键字

时间:2023年06月10日 阅读:225
以下内容仅是站长或网友个人学习笔记、总结和研究收藏。不保证正确性,因使用而带来的风险与本站无关!
淘客轩-衣食住行外卖生活好助手

在Go语言中,defer语句会延迟函数或方法或匿名方法的执行,直到附近的函数返回为止。换句话说,延迟函数或方法调用参数会立即求值,但是它们会执行到附近的函数返回为止。您可以使用defer关键字创建延迟的方法,函数或匿名函数。

语法:

// 函数
defer func func_name(parameter_list Type) return_type{
    // Code
}

// 方法
defer func (receiver Type) method_name(parameter_list){
    // Code
}

defer func (parameter_list)(return_type){
    // code
}()

注意事项:

  • 在Go语言中,同一程序中允许多个defer语句,并且它们按LIFO(后进先出)顺序执行,如示例2所示。

  • 在defer语句中,将在执行defer语句时(而不是在调用它们时)评估参数。

  • defer语句通常用于确保在完成文件处理后关闭文件,关闭通道或捕获程序中的紧急情况。

让我们借助示例来讨论这个概念:

范例1:

package main

import "fmt"

// 函数
func mul(a1, a2 int) int {
    res := a1 * a2
    fmt.Println("Result: ", res)
    return 0
}

func show() {
    fmt.Println("Hello!, www.momojc.cn Go语言MOMO教程")
}

func main() {

    //调用mul()函数
    //这里mul函数的行为
    //像普通函数一样
    mul(23, 45)

    //调用mul()函数
    //使用defer关键字
    //这里是mul()函数
    //是延迟函数
    defer mul(23, 56)
    //调用show()函数
    show()
}

输出:

Result:  1035
Hello!, www.momojc.cn Go语言MOMO教程
Result:  1288

用法解释:在上面的示例中,我们有两个名为mul()show()函数的函数。其中show()函数通常在main()函数中调用,同时我们以两种不同的方式调用mul()函数:

  • 首先,我们像常规函数一样调用mul函数,即mul(23,45)并在函数调用时执行(输出:Result:1035)。

  • 其次,我们使用defer关键字将mul()函数称为defer函数,即defer mul( 23,56),当所有周围的方法返回时,它将执行(输出:Result:1288)。

范例2:

package main 
  
import "fmt"
  
// 函数
func add(a1, a2 int) int { 
    res := a1 + a2 
    fmt.Println("Result: ", res) 
    return 0 
} 
  
func main() { 
  
    fmt.Println("Start") 
  
    //多个延迟语句
    //以LIFO顺序执行
    defer fmt.Println("End") 
    defer add(34, 56) 
    defer add(10, 10) 
}

输出:

Start
Result:  20
Result:  90
End
打赏
标签: Go Defer关键字

本文地址:https://www.momojc.cn/golang/go-defer-keyword.html

关于本站 | 隐私政策 | 免责声明 | 广告合作 | 我要投稿 | 后台管理

CopyRight © 2023-2024 MOMO教程 WWW.MOMOJC.CN , All Rights Reserved.

站长E-mail:378074730@qq.com 网站已运行:  运行时长:0.039 秒

京ICP备20029690号-1京ICP备20029690号-2 京公网安备11011402013892号京公网安备11011402013892号 中国互联网违法和不良信息举报中心 网络违法犯罪举报网站

本网站托管于 腾讯云 .由网站卫士提供网站加速和攻击防御服务 提供CDN加速/防御服务.由zblogcn强力驱动 又拍云提供CDN加速/云存储服务 51la网站统计