国产探花免费观看_亚洲丰满少妇自慰呻吟_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語言程序設計有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 昌图县| 永仁县| 阳曲县| 安吉县| 成都市| 无锡市| 工布江达县| 康定县| 海安县| 安达市| 舞阳县| 怀宁县| 六盘水市| 随州市| 如东县| 桦川县| 平泉县| 杭锦旗| 枣强县| 克山县| 石嘴山市| 文成县| 皋兰县| 齐齐哈尔市| 东港市| 改则县| 余干县| 呈贡县| 永昌县| 商南县| 建始县| 汕尾市| 墨玉县| 兴海县| 习水县| 吉安县| 左权县| 邓州市| 隆安县| 台南县| 平乐县|