欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

defer 在聲明時(shí)不會立即執(zhí)行,而是在函數(shù) return 后,再按照 FILO (先進(jìn)后出)的原則依次執(zhí)行每一個 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() //每次申請資源時(shí),請習(xí)慣立即申請一個 defer 關(guān)閉資源,這樣就不會忘記釋放資源了

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

 return io.Copy(dstFile, srcFile)
}


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

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

相關(guān)文章

  • Go語言基于viper實(shí)現(xiàn)apollo多實(shí)例快速

    Go語言基于viper實(shí)現(xiàn)apollo多實(shí)例快速

    viper是適用于go應(yīng)用程序的配置解決方案,這款配置管理神器,支持多種類型、開箱即用、極易上手。本文主要介紹了如何基于viper實(shí)現(xiàn)apollo多實(shí)例快速接入,感興趣的可以了解一下
    2023-01-01
  • golang?使用sort.slice包實(shí)現(xiàn)對象list排序

    golang?使用sort.slice包實(shí)現(xiàn)對象list排序

    這篇文章主要介紹了golang?使用sort.slice包實(shí)現(xiàn)對象list排序,對比sort跟slice兩種排序的使用方式區(qū)別展開內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • go?time.Sleep睡眠指定時(shí)間實(shí)例詳解(小時(shí)級到納秒級)

    go?time.Sleep睡眠指定時(shí)間實(shí)例詳解(小時(shí)級到納秒級)

    golang的休眠可以使用time包中的sleep,下面這篇文章主要給大家介紹了關(guān)于go?time.Sleep睡眠指定時(shí)間(小時(shí)級到納秒級)的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究

    Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究

    這篇文章主要為大家介紹了Golang實(shí)現(xiàn)自己的Redis(有序集合跳表)實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • GoLang 逃逸分析的機(jī)制詳解

    GoLang 逃逸分析的機(jī)制詳解

    這篇文章主要介紹了GoLang-逃逸分析的機(jī)制詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • Golang設(shè)計(jì)模式之組合模式講解

    Golang設(shè)計(jì)模式之組合模式講解

    這篇文章主要介紹了Golang設(shè)計(jì)模式之組合模式,組合模式針對于特定場景,如文件管理、組織管理等,使用該模式能簡化管理,使代碼變得非常簡潔
    2023-01-01
  • golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能

    這篇文章主要介紹了golang實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,文章通過golang導(dǎo)出excel文件返回給web,實(shí)現(xiàn)瀏覽器導(dǎo)出excel文件功能,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-03-03
  • Go語言range關(guān)鍵字循環(huán)時(shí)的坑

    Go語言range關(guān)鍵字循環(huán)時(shí)的坑

    今天小編就為大家分享一篇關(guān)于Go語言range關(guān)鍵字循環(huán)時(shí)的坑,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Go語言指針使用分析與講解

    Go語言指針使用分析與講解

    這篇文章主要介紹了Go語言指針使用分析與講解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • VSCode安裝go相關(guān)插件失敗的簡單解決方案

    VSCode安裝go相關(guān)插件失敗的簡單解決方案

    這篇文章主要給大家介紹了關(guān)于VSCode安裝go相關(guān)插件失敗的簡單解決方案,VSCode是我們開發(fā)go程序的常用工具,最近安裝的時(shí)候遇到了些問題,需要的朋友可以參考下
    2023-07-07

最新評論