Golang學習筆記:體驗函數閉包

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

最近閑來無事,即將畢業,把自己賣給了杭州的招銀網路,正好利用這段時間可以好好學習以下Go語言。

從高中開始接觸編程,當時還是用的Pascal語言,主要是為了參加資訊競賽,後來上了大學,大二開始學習Java便開始了我的Java旅程。到現在,已經用Java用了快六年了,前段時間找工作深深體會到了Java的美妙之處——需求量大。哈哈,相比實驗室中用C/C++的小夥伴們,真的是太幸福了!!!

好基友本科畢業後就去了聚美優品,兩年前就和我提到過Golang,說是很有前途,當時還沒什麼感覺,也就沒有當回事。直到前段時間,聽說B站和一些公司,後台系統用Golang重構了,加上區塊鏈的出現,感覺未來即使Golang不是最屌的,也會是主流。

說實話,重新學習一門語言,說簡單也簡單,說不簡單也不簡單。最近主要就是跟著Go指南,一步步瞭解熟悉Go語言(還好沒有忘乾淨C語言!!!)

指南中,前面的練習基本沒什麼難度,直到函數閉包這節。

利用函數閉包返回連續的費伯納西數。

初始狀態

package mainimport "fmt"// fibonacci 函數會返回一個返回 int 的函數。func fibonacci() func() int {}func main() {f := fibonacci()for i := 0; i < 10; i++ {fmt.Println(f())}}

看上去難度不大,我的思路是:維持一個長度為2的隊列,每次返回就將隊列中的兩個數相加,並出隊第一個數,結果再入隊。

首先要解決的問題是:隊列的實現。Java中有許多可以實現隊列的工具,那麼Go呢?萬能的Google告訴我,可以用container/list實現隊列。

list中的PushBack、Remove、Front都可以滿足我的需求。

當我真正寫的時候遇到一個比較尷尬的問題:list中元素都是Element類型,Go也沒有像Java一樣在建立list的時候指明元素的具體類型,而是採用了傳說中的萬能類型interface。

在我想要將兩個元素做加法時,報錯了:

cannot convert a.Value (type interface {}) to type int: need type assertion

解決辦法也很明確了:需要類型斷言

通過Google發現,類型斷言是Golang中解決這類問題的一種機制:A type assertion provides access to an interface value's underlying concrete value.類型斷言機制提供了介面值到具體類型值的轉化介面

對於我的需求,可以利用類型斷言實現interface的值到int值的轉換。

剩下的就是實現需求了

package mainimport ("fmt""container/list")// fibonacci 函數會返回一個返回 int 的函數。func fibonacci() func() int {fl:=list.New()fl.PushBack(int(0))fl.PushBack(int(0))return func() int {a:=fl.Front()fl.Remove(a)b:=fl.Front()tmp:=int(a.Value.(int))+int(b.Value.(int))//類型斷言if tmp == 0{tmp =1;}fl.PushBack(tmp)return tmp;}}func main() {f := fibonacci()for i := 0; i < 10; i++ {fmt.Println(f())}}

剛開始學習Go,其中有些概念可能理解的不對,希望大家幫忙指出!!!

相關文章

聯繫我們

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