這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
不用管理 grouting 和 channel 了。 以下為轉寄 golangtc.com 原文:
剛剛寫了個包,覺得值得出來分享下:
文檔: https://github.com/sunfmin/fanout
用來簡化並發程式(goroutine, channel)的編寫,這個包直接改寫自Go Concurrency Patterns: Pipelines部落格的最後一個範例程式。
平時寫帶goroutine和channel的程式,總是時不時的爆"fatal error: all goroutines are asleep - deadlock!",檢查起來又很難找原因。
例子程式 - 用60個goroutine一起跑whois來查看網域名稱是不是還在:
inputs := []interface{}{}for _, word:= range domainWords { inputs = append(inputs, word)}results, err2 := fanout.ParallelRun(60, func(input interface{})(interface{}, error) { word := input.(string) if strings.TrimSpace(word) == "" { return nil, nil } py := pinyin.Convert(word) pydowncase := strings.ToLower(py) domain := pydowncase + ".com" outr, err := domainAvailable(word, domain) if outr.available { fmt.Printf("[Ohh Yeah] %s %s\n", outr.word, outr.domain) } else { fmt.Printf("\t\t\t %s %s %s\n", outr.word, outr.domain, outr.summary) } if err != nil { fmt.Println("Error: ", err) } return outr, nil}, inputs)fmt.Println("Finished ", len(results), ", Error:", err2)
一圖來說明: