分享
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。
不用管理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)
一图来说明。

有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信4423 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传