// select.go package main import ( "fmt" "time" //"time" ) func main() { //声明一个channel ch := make(chan int) //声明一个匿名函数,传入一个参数整型channel类型ch go func(ch chan int) { ch <- 1 //往channel写入一个数据,此时阻塞 }(ch) //由于goroutine执行太快,先让它sleep 1秒 time.Sleep(time.Second) select { //读取ch,解除阻塞 case <-ch: fmt.Print("come to read ch!") default: fmt.Print("come to default!") } }
// select.go //整型channel类型ch一直处于读取状态,所以处于阻塞,使用select实现超时控制 package main import ( "fmt" "time" ) func main() { ch := make(chan int) //buffer channel,1个元素前非阻塞 timeout := make(chan int, 1) go func() { time.Sleep(time.Second) //写channel timeout <- 1 }() select { //读channel case <-ch: fmt.Print("come to read ch!") //没有读到channel,实现超时控制 case <-timeout: fmt.Print("come to timeout!") } fmt.Print("end of code!") }
// select.go //使用time.After实现超时控制 package main import ( "fmt" "time" ) func main() { ch := make(chan int) select { case <-ch: fmt.Print("come to read ch!") case <-time.After(time.Second): fmt.Print("come to timeout!") } fmt.Print("end of code!") }
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Node.js 指南(阻塞与非阻塞概述)
- Node.js 回调函数 阻塞与非阻塞
- 明明白白学 同步、异步、阻塞与非阻塞
- 从 Linux 源码看 socket 的阻塞和非阻塞
- 分布式系统关注点——阻塞与非阻塞有什么区别?
- Netty基础系列(2) --彻底理解阻塞非阻塞与同步异步的区别
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Hacking Growth
Sean Ellis、Morgan Brown / Crown Business / 2017-4-25 / USD 29.00
The definitive playbook by the pioneers of Growth Hacking, one of the hottest business methodologies in Silicon Valley and beyond. It seems hard to believe today, but there was a time when Airbnb w......一起来看看 《Hacking Growth》 这本书的介绍吧!