测试和学goroutine, 遇到的问题

lccc · · 822 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

想从一个字符切片[]string中打印切片中的每个元素, 且每个打印动作都用一个goroutine完成, 限制goroutine最大数量 为5。 以下是我写的代码, 但不能打印完整, 5个goroutine用完后不会打切片后面的字符了,怎么让goroutine循环使用, 将其切片中所有的字符 打印完? 哪位高手来指点一下。 ```go package main import ( "fmt" "time" ) type Worker struct { Workcount int } func (w *Worker) Run(ch chan string, strs []string) { for i := 0; i < w.Workcount; i++ { var s string if len(strs) > 0 { s = strs[0] strs = strs[1:] } createWorker(ch, s, i) } } func createWorker(ch chan string, s string, goid int) { go func(id int) { worker(id,ch, s) }(goid) } func worker(id int,ch chan string, str string) { ch <- str fmt.Printf("goid is %d , string is %s\n", id, str) } func main() { input := []string{"goland", "time", "slice", "reflect", "strings", "regexp", "map", "convert", "google", "complier"} e := Worker{Workcount: 5} ch := make(chan string) e.Run(ch, input) t := time.After(5 * time.Second) for { select { case re := <-ch: fmt.Println(re) case <-t: fmt.Println("timeout") return } } } ```

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

822 次点击  
加入收藏 微博
5 回复  |  直到 2018-12-29 15:18:36
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传