Go語言的匿名函數與閉包

來源:互聯網
上載者:User

匿名函數:由一個不帶函數名的函式宣告和函數體組成

func(a,b int,z float64)bool{   return a*b<int(z)}

匿名函數可以直接賦值給一個變數或直接執行

閉包:
概念:
閉包是可以包含自由變數(未綁定到特定對象)的代碼塊,這些變數不在這個代碼塊內或者任何全域上下文中定義,而是在定義代碼塊的環境中定義。要執行的代碼塊(由於自由變數包含在代碼塊中,所以這些自由變數以及他們引用的對象沒有被釋放)為自由變數提供綁定的計算環境(範圍)。

Go預言中的閉包:

package mainimport(  "fmt")func main(){   var j int = 5       a:=func() (func()){       var i int = 10           return func(){           fmt.Printf("i,j:%d,%d\n",i,j)           }       }()//將一個無需參數傳回值為匿名函數的函數賦值給a()       a()       j*=2      // i*=2這樣是錯的       a()}

如上所見,雖然i是局部變數但是只要閉包還在使用,那麼被閉包引用的變數就會一直存在
而i除了在內部匿名函數中可以訪問外,無法通過其他方式處理,因此保證了i的安全性

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.