美文网首页
Go语言之defer语句

Go语言之defer语句

作者: 测试探索 | 来源:发表于2020-05-31 18:06 被阅读0次
1. defer函数或方法

一个函数或方法的执行被延迟了

2. defer的用法:
  • 对象.close(),临时文件的删除。。。
      文件.open()
      defer close()
      读或写
  • go语言中关于异常的处理,使用panic()和recover()
      panic函数用于引发恐慌,导致程序中断执行
      recover函数用于恢复程序的执行,recover()语法上要求必须在defer中执行
  • 多个defer
    多个defer时,弹栈处理
package main

import "fmt"

func main() {
    defer fun1("hello")
    fmt.Println("12345")
    defer fun1("world")
    fmt.Println("王二狗")
}

func fun1(s string) {
    fmt.Println(s)
}

//结果
12345
王二狗
world
hello
  • defer函数传递参数的时候:
    defer函数调用时,就已经传递参数数据了,只是暂时不执行函数中的代码而已
package main

import "fmt"

func main() {
    a := 2
    fmt.Println(a)
    defer fun2(a)
    a++
    fmt.Println(a)
}

func fun2(a int) {
    fmt.Println("fun2()函数中打印a: ",a)
}

func fun1(s string) {
    fmt.Println(s)
}
//结果
主函数中的a:  2
主函数中的a: 3
fun2()函数中打印a:  2
  • defer 函数注意点
    当外围函数中的语句正常执行完毕时,只有其中所有的延迟函数都执行完毕,外围函数才会真正的结束执行。
    当执行外围函数中的return语句时,只有其中所有的延迟函数都执行完毕后,外围函数才会真正返回,当外围函数中的代码引发运行恐慌时,只有其中所有的延迟函数都执行完毕后,该运行时恐慌才会真正被扩展至调用函数
package main

import "fmt"

func main() {
    //defer fun1("hello")
    //fmt.Println("12345")
    //defer fun1("world")
    //fmt.Println("王二狗")

    a := 2
    fmt.Println("主函数中的a: ",a)
    defer fun2(a)
    a++
    fmt.Println("主函数中的a:", a)

    fmt.Println(fun3())
}

func fun3() int{
    fmt.Println("fun3()函数的执行。。。")
    defer fun1("哈哈")
    return 0
}

func fun2(a int) {
    fmt.Println("fun2()函数中打印a: ",a)
}

func fun1(s string) {
    fmt.Println(s)
}

//结果
主函数中的a:  2
主函数中的a: 3
fun3()函数的执行。。。
哈哈
0
fun2()函数中打印a:  2
```--++

相关文章

  • Go语言之defer语句

    1. defer函数或方法 一个函数或方法的执行被延迟了 2. defer的用法: 对象.close(),临时文件...

  • 异常

    1、error接口 2、defer 你可以在Go函数中添加多个defer语句,当函数执行到最后时,这些defer语...

  • defer go

    Go语言的 defer 语句会将其后面跟随的语句进行延迟处理,在 defer 归属的函数即将返回时,将延迟处理的语...

  • go语言的defer语句

    go语言defer语句的用法 defer的语法 defer后面必须是函数调用语句,不能是其他语句,否则编译器会出错...

  • Golang中defer用法

    Go语言中的defer语句会将其后面跟随的语句进行延迟处理。在defer归属的函数即将返回时,将延迟处理的语句按d...

  • Go基础笔记

    Go语言基础(一) 流程控制语句:for、if、else、switch、defer for Go只有一种循环结构:...

  • Go语言之defer

    定义 defer语句被用于预定对一个函数的调用。我们把这类被defer语句调用的函数称为延迟函数。 注意,defe...

  • 第15章-defer语句

    defer 1.1 延迟是什么? 即延迟(defer)语句,延迟语句被用于执行一个函数调用,在这个函数之前,延迟语...

  • golang语言defer特性详解.md

    [TOC] golang语言defer特性详解 defer语句是go语言提供的一种用于注册延迟调用的机制,它可以让...

  • 深入理解 Go-Defer的机制

    defer 的作用和执行时机 go 的 defer 语句是用来延迟执行函数的,而且延迟发生在调用函数 return...

网友评论

      本文标题:Go语言之defer语句

      本文链接:https://www.haomeiwen.com/subject/vydrzhtx.html