最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GO語言延遲函數(shù)defer用法分析

 更新時(shí)間:2014年12月03日 16:09:22   投稿:shichen2014  
這篇文章主要介紹了GO語言延遲函數(shù)defer用法,較為詳細(xì)的分析了GO語言的特性與具體用法,并給出了一個(gè)比較典型的應(yīng)用實(shí)例,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

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

defer 在聲明時(shí)不會(huì)立即執(zhí)行,而是在函數(shù) return 后,再按照 FILO (先進(jìn)后出)的原則依次執(zhí)行每一個(gè) defer,一般用于異常處理、釋放資源、清理數(shù)據(jù)、記錄日志等。這有點(diǎn)像面向?qū)ο笳Z言的析構(gòu)函數(shù),優(yōu)雅又簡潔,是 Golang 的亮點(diǎn)之一。

代碼1:了解 defer 的執(zhí)行順序

復(fù)制代碼 代碼如下:
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("函數(shù)返回值:", fn(0))
}


輸出:

1st: 1
2st: 2
3st: 3
函數(shù)返回值: 0

代碼2:經(jīng)典應(yīng)用實(shí)例

復(fù)制代碼 代碼如下:
func CopyFile(dst, src string) (w int64, err error) {
 srcFile, err := os.Open(src)
 if err != nil {
  return
 }
 defer srcFile.Close() //每次申請(qǐng)資源時(shí),請(qǐng)習(xí)慣立即申請(qǐng)一個(gè) defer 關(guān)閉資源,這樣就不會(huì)忘記釋放資源了

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

 return io.Copy(dstFile, srcFile)
}


defer 還有一個(gè)重要的特性,就是即便函數(shù)拋出了異常,也會(huì)被執(zhí)行的。 這樣就不會(huì)因程序出現(xiàn)了錯(cuò)誤,而導(dǎo)致資源不會(huì)釋放了。

希望本文所述對(duì)大家的GO語言程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • Go通用的?MapReduce?工具函數(shù)詳解

    Go通用的?MapReduce?工具函數(shù)詳解

    本文介紹了使用Go語言實(shí)現(xiàn)的MapReduce框架,特別是在AWSS3?SDK的MultiPartUpload功能中的應(yīng)用,包括并發(fā)上傳和錯(cuò)誤處理策略,詳細(xì)解釋了如何通過并發(fā)goroutines提高上傳效率,并通過MapReduce模型優(yōu)化代碼結(jié)構(gòu)和處理流程,感興趣的朋友跟隨小編一起看看吧
    2024-09-09
  • Go語言實(shí)現(xiàn)猜數(shù)字小游戲

    Go語言實(shí)現(xiàn)猜數(shù)字小游戲

    這篇文章主要為大家詳細(xì)介紹了Go語言實(shí)現(xiàn)猜數(shù)字小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • Goland編輯器設(shè)置選擇范圍背景色的操作

    Goland編輯器設(shè)置選擇范圍背景色的操作

    這篇文章主要介紹了Goland編輯器設(shè)置選擇范圍背景色的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • GoLang協(xié)程庫libtask學(xué)習(xí)筆記

    GoLang協(xié)程庫libtask學(xué)習(xí)筆記

    libtask一個(gè)C語言的協(xié)程庫,是go語言的前身很早期的原型. 測(cè)試機(jī)器是我的mac air 安裝的centos虛擬機(jī)(只有一個(gè)核), 代碼沒有采用任何優(yōu)化,只是使用默認(rèn)配置
    2022-12-12
  • Go處理JSON數(shù)據(jù)的實(shí)現(xiàn)

    Go處理JSON數(shù)據(jù)的實(shí)現(xiàn)

    本文主要介紹了Go處理JSON數(shù)據(jù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 使用go在mangodb中進(jìn)行CRUD操作

    使用go在mangodb中進(jìn)行CRUD操作

    這篇文章主要介紹了使用go在mangodb中進(jìn)行CRUD操作,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-10-10
  • golang 如何通過反射創(chuàng)建新對(duì)象

    golang 如何通過反射創(chuàng)建新對(duì)象

    這篇文章主要介紹了golang 通過反射創(chuàng)建新對(duì)象的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Go 字符串格式化的實(shí)例代碼詳解

    Go 字符串格式化的實(shí)例代碼詳解

    這篇文章主要介紹了Go 字符串格式化的實(shí)例代碼詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Golang協(xié)程常見面試題小結(jié)

    Golang協(xié)程常見面試題小結(jié)

    本文主要介紹了Golang協(xié)程常見面試題小結(jié),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • 使用Go基于WebSocket構(gòu)建千萬級(jí)視頻直播彈幕系統(tǒng)的代碼詳解

    使用Go基于WebSocket構(gòu)建千萬級(jí)視頻直播彈幕系統(tǒng)的代碼詳解

    這篇文章主要介紹了使用Go基于WebSocket構(gòu)建千萬級(jí)視頻直播彈幕系統(tǒng),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

刚察县| 岢岚县| 土默特左旗| 惠来县| 贵州省| 邯郸县| 陇南市| 临高县| 东阿县| 应用必备| 周至县| 吉木乃县| 德令哈市| 徐州市| 天镇县| 浏阳市| 鹰潭市| 理塘县| 孝义市| 邹城市| 依兰县| 延津县| 蓝田县| 扶风县| 大同县| 太仓市| 铁岭县| 香河县| 辽宁省| 盐城市| 通许县| 济南市| 额济纳旗| 稷山县| 西盟| 伽师县| 德令哈市| 雷波县| 章丘市| 沿河| 手游|