国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

GO語言延遲函數defer用法分析

2020-04-01 19:23:21
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了GO語言延遲函數defer用法,較為詳細的分析了GO語言的特性與具體用法,并給出了一個比較典型的應用實例,具有一定的參考借鑒價值,需要的朋友可以參考下
 

本文實例講述了GO語言延遲函數defer用法。分享給大家供大家參考。具體分析如下:

defer 在聲明時不會立即執行,而是在函數 return 后,再按照 FILO (先進后出)的原則依次執行每一個 defer,一般用于異常處理、釋放資源、清理數據、記錄日志等。這有點像面向對象語言的析構函數,優雅又簡潔,是 Golang 的亮點之一。

代碼1:了解 defer 的執行順序

復制代碼代碼如下:
package main

 

import "fmt"

func fn(n int) int {
 defer func() {
  n++
  fmt.Println("3st:", n)
 }()

 defer func() {
  n++
  fmt.Println("2st:", n)
 }()

 defer func() {
  n++
  fmt.Println("1st:", n)
 }()

 return n //沒有做任何事情
}

func main() {
 fmt.Println("函數返回值:", fn(0))
}


輸出:

 

1st: 1
2st: 2
3st: 3
函數返回值: 0

代碼2:經典應用實例

復制代碼代碼如下:
func CopyFile(dst, src string) (w int64, err error) {
 srcFile, err := os.Open(src)
 if err != nil {
  return
 }
 defer srcFile.Close() //每次申請資源時,請習慣立即申請一個 defer 關閉資源,這樣就不會忘記釋放資源了

 

 dstFile, err := os.Create(dst)
 if err != nil {
  return
 }
 defer dstFile.Close()

 return io.Copy(dstFile, srcFile)
}


defer 還有一個重要的特性,就是即便函數拋出了異常,也會被執行的。 這樣就不會因程序出現了錯誤,而導致資源不會釋放了。

 

希望本文所述對大家的GO語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎赉特旗| 和林格尔县| 隆子县| 桃园县| 平乐县| 西畴县| 永平县| 绥中县| 阿拉善右旗| 灌南县| 尖扎县| 横峰县| 五常市| 临邑县| 汶川县| 准格尔旗| 湖南省| 宜城市| 清新县| 商河县| 金秀| 广元市| 余姚市| 灵璧县| 金秀| 彰武县| 楚雄市| 陈巴尔虎旗| 吉水县| 恩平市| 台中市| 绥中县| 阜城县| 库伦旗| 屏边| 潮安县| 临夏市| 巴青县| 长岭县| 天全县| 志丹县|