Golang 對閉包的一些個人理解

2021-10-09 21:19:16 字數 947 閱讀 7356

以下是個人理解:

閉包可以理解為一種儲存函式狀態的方法,當我們呼叫乙個函式,或者執行操作,或者返回結果,總之當函式執行結束後,隨即消亡,因為函式的宣告一般是在堆上,當系統檢測到當前記憶體空間沒有被引用,那麼就會**。

閉包的作用就是儲存函式的執行狀態,避免記憶體被**。當然會占用大量的記憶體。

**說明:

package main

func

main()

func

add(

)func

(i int

)int

}

執行結果:

0xc0000b22b011

0xc0000b22b022

0xc0000b22b033

0xc0000b22b811

0xc0000b22b822

0xc0000b22b8

33

可以看到變數是在兩個記憶體空間,每次呼叫add()都申請了乙個變數s,並且在自己函式的引用空間內,s變數的值都得以儲存。

上面的**中,我們在add()函式中申請了區域性變數s,那麼如果我們初始化乙個全域性變數s,結果又如何呢?

package main

func

main()

var s =

0func

add(

)func

(i int

)int

}

執行結果:

0x133746811

0x133746822

0x133746833

0x133746844

0x133746855

0x1337468

66

可以看到都是同乙個記憶體位址,申請的s變數的記憶體空間被保留下來。

一些個人的想法

今天是2016年4月2日,星期六。目前我已經在網際網路行業裡摸爬滾打了三年有餘,加上七年的求學生涯,轉眼一看已經十年了。過去的十年是網際網路行業蓬勃發展的十年,雲計算 資料探勘以及移動網際網路的興起讓我們的生活出現了翻天覆地的變化 在這個遍地充滿機會的時代裡,出現了乙個又乙個的弄潮兒 這是乙個最好的...

對程式設計師的一些個人建議

答讀者問 以下內容摘自 冒號論壇 的乙個話題 考慮其具有一定的典型性,故轉至 冒號空間 希望能對更多的讀者有所幫助,也算是一種 重用吧。讀者jee問 之前在top language 裡的一位像我推薦您的 冒號課堂 書中 eric 向您建議開設社群,我猜測可能會有,就找到您的部落格發現此地,很幸運您是...

PDV的一些個人理解

最近剛剛考完sas base,對這個考試的一大感受就是,只要你理解了pdv,基本上就不成問題。接下來談談我對pdv的理解吧,也算是學習sas的過程中的乙個筆記。sas的執行有兩個階段需要了解,編譯階段 compilation phase 和執行階段 execution phase 編譯階段sas主要...