多线程代码这样:
package main import "fmt" func Add(x, y int, ch chan int) { ch <- x + y fmt.Println("Adding") } func main() { chs := make(chan int, 5) for i := 0; i < 10; i++ { go Add(i, i, chs) } for value := range chs { //value := <-ch fmt.Println(value) } //close(chs) }
使用liteIDE运行结果:
c:/go/bin/go.exe run add.go [D:/goproject/study/src/goThread] Adding Adding Adding Adding Adding 0 2 4 6 8 Adding Adding Adding Adding Adding 10 12 14 16 18 fatal error: all goroutines are asleep - deadlock! goroutine 1 [chan receive]: main.main() D:/goproject/study/src/goThread/add.go:17 +0x96 exit status 2 错误: 进程退出代码 1.
运行结果是出来了,但是怎么才能不让它报错?
那个channel要在数据传输完毕的时候关闭,而且要在数据的发送端关闭。
好像是这样的。
你看我这样就没报错:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。