golang匿名函數和閉包

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

匿名函數和閉包:

閉包和匿名函數經常一起使用,可以使用閉包來訪問函數中的局部變數(被訪問操作的變數為指標指向關係,操作的是同一個局部變數)如:

func closure(x int) (func(), func(int)) {    fmt.Printf("初始值x為:%d,記憶體位址:%p\n", x, &x)    f1 := func() {        x = x + 5        fmt.Printf("x+5:%d,記憶體位址:%p\n", x, &x)    }    f2 := func(y int) {        x = x + y        fmt.Printf("x+%d:%d,記憶體位址:%p\n", y, x, &x)    }    return f1, f2}func main() {    func1, func2 := closure(10)    func1()    func2(10)    func2(20)}
輸出結果為:
初始值x為:10,記憶體位址:0xc080000038
x+5:15,記憶體位址:0xc080000038
x+10:25,記憶體位址:0xc080000038
x+20:45,記憶體位址:0xc080000038 

個人理解: 

其實理解閉包的最方便的方法就是將閉包函數看成一個類,一個閉包函數調用就是執行個體化一個類。但很遺憾的是,目前我還無法領會閉包設計思想背後的精髓含義以及其所蘊含的哲學思想。

參考

關於golang中函數可參考如下一些資料,可能會有助於理解golang中的函數和閉包http://www.cnblogs.com/yjf512/archive/2012/12/09/2810313.html
http://www.ibm.com/developerworks/cn/linux/l-cn-closure/index.html
http://wklken.me/posts/2014/03/02/05-func.html
http://my.oschina.net/u/698121/blog/157599
http://ieqi.net/2013/03/11/%E7%9C%8B%E8%8C%83%E4%BE%8B%E5%AD%A6-golang-%EF%BC%88%E5%8D%81%E4%BA%94%EF%BC%89-%E9%97%AD%E5%8C%85/http://www.fenby.com/course/units/1015#top
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.