分享
Go学习笔记-协程
simbadan · · 2807 次点击 · · 开始浏览这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
错误:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
1、channel的缓冲区默认为0,直接写入会报错,错误如上
c := make(chan int) 不带缓冲区通道
c <- 1
向不带缓冲区通道写入,会等待能够接收操作,并且确保该值被成功接收。
会引起无限等待
有配对的goroutine读取,正常执行
c := make(chan int)
go func() {
c <- 1
c <- 2
c <- 3
}()
<-c
不带缓冲区的阻塞顺序:
c := make(chan int)
go func() {
c <- 1
fmt.Println(4)
c <- 2
fmt.Println(5)
c <- 3
fmt.Println(6)
}()
fmt.Println(7)
fmt.Println(<-c)
fmt.Println(8)
fmt.Println(<-c)
fmt.Println(9)
fmt.Println(<-c)
fmt.Println(10)
输出:
7
4
1
8
2
9
5
6
3
10
3、for range 会一直读取channel内的值,如果没有close 会报错,报错如上
c := make(chan int, 1)
go func() {
c <- 1
c <- 2
c <- 3
//close(c)
}()
for i := range c {
fmt.Println(i)
}
4、select case 会执行尽快能返回的case,都不能尽快返回,会阻塞等待
case 表达式都会被执行
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信2807 次点击
下一篇:Go 学习笔记(一)
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
错误:
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan receive]:
1、channel的缓冲区默认为0,直接写入会报错,错误如上
c := make(chan int) 不带缓冲区通道
c <- 1
向不带缓冲区通道写入,会等待能够接收操作,并且确保该值被成功接收。
会引起无限等待
有配对的goroutine读取,正常执行
c := make(chan int)
go func() {
c <- 1
c <- 2
c <- 3
}()
<-c
不带缓冲区的阻塞顺序:
c := make(chan int)
go func() {
c <- 1
fmt.Println(4)
c <- 2
fmt.Println(5)
c <- 3
fmt.Println(6)
}()
fmt.Println(7)
fmt.Println(<-c)
fmt.Println(8)
fmt.Println(<-c)
fmt.Println(9)
fmt.Println(<-c)
fmt.Println(10)
输出:
7
4
1
8
2
9
5
6
3
10
3、for range 会一直读取channel内的值,如果没有close 会报错,报错如上
c := make(chan int, 1)
go func() {
c <- 1
c <- 2
c <- 3
//close(c)
}()
for i := range c {
fmt.Println(i)
}
4、select case 会执行尽快能返回的case,都不能尽快返回,会阻塞等待
case 表达式都会被执行