go學習篇之設計模式

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

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">       <span style="font-size:14px;">   在純粹的物件導向設計語言中,設計模式對於我們大多數人來說應該是最熟悉最得力的武器了,可是在go語言中,從接觸至今這大半年的時間裡還沒遇到過go設計模式這個概念,這幾天想起來也就翻翻資料,找找關於go設計模式相關的資料,可是很少很少,就連最簡單的單例模式,自己想了很久也不知道用go語言怎麼去寫,因為go中沒有靜態概念,很是揪心。今天我們一起學習下他人寫的關於go的迭代器,其實完全是模仿JAVA C#語言中的迭代器,不過也很具有參考價值,至少為我們開了個好頭:</span></span>


以下代碼大部分來源於:http://www.tuicool.com/articles/vumYbu

// goIterator project main.gopackage mainimport "fmt"type Ints []intfunc (i Ints) First() Iterator {return Iterator{data:  i,index: 0,}}type Iterator struct {data  Intsindex int}func (i Iterator) Get() int {return i.data[i.index]}func (i Iterator) HasNext() bool {return i.index < len(i.data)}func (i Iterator) Next() Iterator {return Iterator{data:  i.data,index: i.index + 1,}}func main() {ints := Ints{1, 2, 3}for it := ints.First(); it.HasNext(); it = it.Next() {fmt.Println(it.Get())}}
大家比較熟悉JAVA的Integer,此處即模仿Integer類做了go的迭代器封裝

// goIterator project main.gopackage mainimport "fmt"type Ints []intfunc (i Ints) Iterator() func() (int, bool) {index := 0return func() (val int, ok bool) {if index >= len(i) {return}val, ok = i[index], trueindex++return}}func main() {ints := Ints{1, 2, 3}it := ints.Iterator()for {val, ok := it()if !ok {break}fmt.Println(val)}}

此處使用匿名函數和閉包來實現了迭代器的效果,不過此處不能很好的中斷迭代器,或者使迭代器在某個制定地方輸出我們想要的結果,不過思想確實很新穎。

// goIterator project main.gopackage mainimport "fmt"type Ints []intfunc (i Ints) Iterator() <-chan int {c := make(chan int)go func() {for _, v := range i {c <- v}close(c)}()return c}func main() {ints := Ints{1, 2, 3}for v := range ints.Iterator() {fmt.Println(v)}}

以上使用channel來完成迭代遍曆int[]每個元素的功能,雖然看似華麗,確實也很華麗,不過同上面一樣,不能很好的中斷,否則將帶來永久的阻塞。。。 而且線程間切換會有一定的cpu消耗,但可以忽略不計,思想很值得借鑒。看過了這些,我覺得設計模式在go的應用中,一定會讓我們看見不一樣的神奇的力量!


如果大家有什麼好的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.