老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

go語言推遲函數,go語言常用函數

3.6 Go語言函數的延遲調用(Deferred Code)

在以下這段代碼中,我們操作一個文件,無論成功與否都需要關閉文件句柄。這里在三處不同的位置都調用了file.Close()方法,代碼顯得非常冗余。

創新互聯-專業網站定制、快速模板網站建設、高性價比師宗網站開發、企業建站全套包干低至880元,成熟完善的模板庫,直接使用。一站式師宗網站制作公司更省心,省錢,快速模板網站建設找我們,業務覆蓋師宗地區。費用合理售后完善,十余年實體公司更值得信賴。

我們利用延遲調用來優化代碼。定義后的defer代碼,會在return之前返回,讓代碼顯得更加緊湊,且可讀性變強,對上面的代碼改造如下:

我們通過這個示例來看一下延遲調用與正常代碼之間的執行順序

先簡單分析一下代碼邏輯:

從輸出中,我們可以觀察到如下現象:

從這個實例中,我們很明顯觀察到,defer語句是在return之前執行

如果一個函數內定義了多個defer,則調用順序為LIFO(后進先出)方式執行。

仍然是相同的例子,但是在TestDefer中我們定義了三個defer輸出,根據LIFO原則,輸出的順序是3rd-2nd-1st,根據最后的結果,也是逆向向上執行defer輸出。

就在整理這篇筆記的時候,發現了自己的認知誤區,主要是本節實例三中發現的,先來看一下英文的描述:

對于上面的這段話的理解:

下面是代碼執行輸出,我們來一起分析一下:

雖然在a()函數內,顯示的返回了10,但是main函數中得到的結果是defer函數自增后的結果,我們來分析一下代碼:

在這篇文章的上一版,我曾經嘗試用指針取解釋defer修改返回值的類型,但是感覺不夠透徹,也讓閱讀者非常困惑,索性參考了一下go官方blog中的一篇文章,在此基礎上進行了擴展。如需要閱讀原文,可以參考下面的文章。

GO語言學習系列八——GO函數(func)的聲明與使用

GO是編譯性語言,所以函數的順序是無關緊要的,為了方便閱讀,建議入口函數 main 寫在最前面,其余函數按照功能需要進行排列

GO的函數 不支持嵌套,重載和默認參數

GO的函數 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

GO的函數用 func 來聲明,且左大括號 { 不能另起一行

一個簡單的示例:

輸出為:

參數:可以傳0個或多個值來供自己用

返回:通過用 return 來進行返回

輸出為:

上面就是一個典型的多參數傳遞與多返回值

對例子的說明:

按值傳遞:是對某個變量進行復制,不能更改原變量的值

引用傳遞:相當于按指針傳遞,可以同時改變原來的值,并且消耗的內存會更少,只有4或8個字節的消耗

在上例中,返回值 (d int, e int, f int) { 是進行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結果都是一樣的,但要注意:

當返回了多個值,我們某些變量不想要,或實際用不到,我們可以使用 _ 來補位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

在參數后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個可變長度的參數

輸出為:

在上例中, strs ...string 中, strs 的實際值是b,c,d,e,這就是一個最簡單的傳遞可變長度的參數的例子,更多一些演變的形式,都非常類似

在GO中 defer 關鍵字非常重要,相當于面相對像中的析構函數,也就是在某個函數執行完成后,GO會自動這個;

如果在多層循環中函數里,都定義了 defer ,那么它的執行順序是先進后出;

當某個函數出現嚴重錯誤時, defer 也會被調用

輸出為

這是一個最簡單的測試了,當然還有更復雜的調用,比如調試程序時,判斷是哪個函數出了問題,完全可以根據 defer 打印出來的內容來進行判斷,非常快速,這種留給你們去實現

一個函數在函數體內自己調用自己我們稱之為遞歸函數,在做遞歸調用時,經常會將內存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調用

本篇重點介紹了GO函數(func)的聲明與使用,下一篇將介紹GO的結構 struct

go語言--Goroutines

1、goroutine:在go語言中,每一個并發的執行單元叫做goroutine,如果一個程序中包含多個goroutine,對兩個函數的調用則可能發生在同一時刻

2、main goroutine:當一個程序啟動時,其主函數即在一個單獨的goroutine中運行,我們叫他為main gorountine

3、go goroutine:新的goroutine會用go語句來創建,go+函數名,go語句會使其語句中的函數在一新創建的goroutine中運行,而go語句本身會迅速地完成

4、goroutine的退出:主函數返回時,所有的goroutine都會被直接打斷,程序退出,除了從主函數退出或者終止程序之外,沒有其他方法能夠讓一個goroutine來打斷另一個的執行,但是可以通過另一種方式來實現這個目的,通過goroutine之間的通信來讓一個goroutine請求其他的goroutine,并讓請求的goroutine自行結束執行

go語言中關于defer的注意事項

舉個例子,如下

答案

解析:

defer函數在處理Panic() 和Recover()時的應用

panic 函數是內置的go函數,它 終止 go程序的當前流程并開始 panicking , recover 函數也是內置的一個go函數,允許你收回處理那些使用了 panic 函數的 goroutine 的控制權

來個案例


本文題目:go語言推遲函數,go語言常用函數
鏈接URL:http://www.xueling.net.cn/article/dsisjpd.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: 国产人成一区二区三区影院 | 国产一区二区三区视频免费 | 欧美亚洲韩国国产综合五月天 | 三区四区在线视频 | 亚洲欧美视屏 | 成人精品一区日本无码网站 | 午夜精品福利一区二区三区蜜桃 | 91麻豆精品| 亚洲av无码专区国产乱码4se | 明星ai换脸二三区入口 | 四虎网址在线观看 | 亚洲第一页在线视频 | 国产在线播放你懂的 | 97免费人做人爱在线看视频 | 激情综合色五月六月婷婷 | 91久久老司机福利精品网 | 国产精品久久久久一区二区 | 国产成a人亚洲精品无码久久网 | 亚洲成人av中文字幕 | 欧美视频一 | 国产精品美女在线 | 国产精品最新资源网 | 中文字幕日韩一区二区 | 亚洲国产精品999久久久婷婷 | 一级aaaa毛片 | 一a一片一级一片按摩师 | 久久国产精品99久久久久久牛牛 | 国产精品多P对白交换绿帽 久久久老司机 | 精品传媒一区二区三区A片 欧美特黄色片 | 明星angelababy造梦视频 | 亚洲欧美日韩中文视频 | 色欲天天来综合网站 | 亚洲精品无码鲁网午夜 | 麻豆视频在线观看免费 | 日韩欧美一区二区三区永久免费 | 无码免费h成年动漫在线观看 | 青娱乐91免费视频 | 野花视频最新免费完整在线观看 | 一级国产精品 | 亚洲精品久久国产精品37P | 精产国品一区二区三区四区 |