golang中select实现非阻塞及超时控制
// select.gopackage mainimport ( "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 mainimport ( "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 mainimport ( "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!")}
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。