Go学习:defer

编程入门 行业动态 更新时间:2024-10-12 05:54:20

Go学习:<a href=https://www.elefans.com/category/jswz/34/1762521.html style=defer"/>

Go学习:defer

defer的概念

defer调用再函数结束时发生,具体概念可以直接百度或者google详细搜索详细,这里主要是通过几个实例来对defer进行详解.

defer实例

实例1

package mainimport "fmt"func tryDefer() {defer fmt.Println(1)fmt.Println(2)
}func main() {// 2// 1tryDefer()
}

实例2

package mainimport "fmt"func tryDefer() {defer fmt.Println(1)defer fmt.Println(2)fmt.Println(3)
}func main() {// 3// 2// 1tryDefer()
}

实例3

package mainimport "fmt"func tryDefer() {defer fmt.Println(1)defer fmt.Println(2)fmt.Println(3)panic("error test")fmt.Println(4)
}func main() {// 3// 2// 1// panic: error testtryDefer()
}

实例4

package mainimport ("bufio""fmt""learngo/errhandling/fib""os"
)func writeFlie(fileName string) {file, err := os.Create(fileName)if err != nil {panic(err)}defer file.Close()writer := bufio.NewWriter(file)defer writer.Flush()f := fib.Fib()for i := 0; i < 20; i++ {fmt.Fprintln(writer,f())}
}func main() {writeFlie("fib.text")
}
package fibfunc Fib() func() int {a, b := 0, 1return func() int {a, b = b, a+breturn a + b}
}

实例5

package mainimport ("fmt"
)func tryDefer1() {for i := 0; i < 10; i++ {defer fmt.Println(i)if i == 5 {panic("error test")}}
}func main() {// 5// 4// 3// 2// 1// 0// panic: error testtryDefer1()
}
  • defer调用确保调用再函数结束时发生
  • 参数再defer语句时计算
  • defer列表为后进先出

何时使用defer调用

  • Open/Close
  • Lock/Unlock
  • PrintHeader/PrintFooter

更多推荐

Go学习:defer

本文发布于:2023-07-28 19:27:19,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1287139.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:defer

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!