《Go语言编程》一书代码调试不通过

joraboy328 · 2017-09-12 02:52:36 · 992 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-09-12 02:52:36 的主题,其中的信息可能已经有所发展或是发生改变。

第4章并发编程channel.go这个代码,没有任何返回值?哪里有问题?

package main
import "fmt"
func Count(ch chan int) {
    ch <- 1
    fmt.Println("Counting")
}

func main() {
    chs := make([]chan int10)
    for i := 0; i < 10; i++ {
        chs[i] = make(chan int)
        go Count(chs[i])
    }
    for _, ch := range(chs) {
        <-ch
    }
}

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

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

992 次点击  
加入收藏 微博
2 回复  |  直到 2017-09-12 03:09:16
lwldcr
lwldcr · #1 · 8年之前

for _, ch := range(chs) { <-ch } 只是出ch,并没有打印出来 当然看不到返回值

lwldcr
lwldcr · #2 · 8年之前
lwldcrlwldcr #1 回复

for _, ch := range(chs) { <-ch } 只是出ch,并没有打印出来 当然看不到返回值

不好意思 没仔细看

原来前面有fmt.Println("Counting")这句 你没有看到输出,是因为main函数在go Count(chs[i])执行之前就退出了,多调试几次,就会看到可能有数目不定的Counting打印出来

在程序末尾加一句 time.Sleep(1 * time.Second), 等待所有goroutine执行, 你就能看到10个Counting了

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传