package main
import (
"fmt"
"time"
)
var unbuffered = make(chan struct{}) // 等价于 make(chan struct{},0)
go func(u chan<- struct{}){
for{
select {
case chan<- struct{}{}:
fmt.Println("Written already.")
}
}
}(unbuffered)
go func(u <-chan struct{}){
for{
select {
case <-chan:
fmt.Println("Read already.")
}
}
}(unbuffered)
time.Sleep(time.Second * 5)
结果如下:
Written already.
Read already.
Written already.
Read already.
Read already.
Written already.
Read already.
Written already.
Written already.
Read already.
Read already.
.....
当添加default语句时如下:
go func(u chan<- struct{}){
for{
select {
case chan<- struct{}{}: //unbuffered chan
fmt.Println("Written already.")
default:
fmt.Println("Nothing!")
}
}
}(unbuffered)
go func(u <-chan struct{}){
for{
select {
case <-chan: //unbuffered chan
fmt.Println("Read already.")
default:
fmt.Println("Nothing!")
}
}
}(unbuffered)
运行结果便成了这样样子:
Nothing!
Nothing!
Nothing!
Nothing!
Nothing!
Nothing!
....
执行的一直是default语句
有疑问加站长微信联系(非本文作者)
入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889
关注微信- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传
收入到我管理的专栏 新建专栏
package main
import (
"fmt"
"time"
)
var unbuffered = make(chan struct{}) // 等价于 make(chan struct{},0)
go func(u chan<- struct{}){
for{
select {
case chan<- struct{}{}:
fmt.Println("Written already.")
}
}
}(unbuffered)
go func(u <-chan struct{}){
for{
select {
case <-chan:
fmt.Println("Read already.")
}
}
}(unbuffered)
time.Sleep(time.Second * 5)
结果如下:
Written already.
Read already.
Written already.
Read already.
Read already.
Written already.
Read already.
Written already.
Written already.
Read already.
Read already.
.....
当添加default语句时如下:
go func(u chan<- struct{}){
for{
select {
case chan<- struct{}{}: //unbuffered chan
fmt.Println("Written already.")
default:
fmt.Println("Nothing!")
}
}
}(unbuffered)
go func(u <-chan struct{}){
for{
select {
case <-chan: //unbuffered chan
fmt.Println("Read already.")
default:
fmt.Println("Nothing!")
}
}
}(unbuffered)
运行结果便成了这样样子:
Nothing!
Nothing!
Nothing!
Nothing!
Nothing!
Nothing!
....
执行的一直是default语句