个人学习笔记
go select
package main
import (
"fmt"
"time"
)
//在一个select语句中,Go语言会按顺序从头至尾评估每一个发送接受的语句。
//如果其中任意一句可以继续执行(即没有被阻塞),那么就从那些可以执行的语句中任意选择一条来执行
//如果没有一条语句可以执行(即所有通道都被阻塞),那么有如下来中可能的情况:
//1,如果给出了default语句,那么就会执行default语句,同时程序的执行会从select语句后的语句中回复
//2.如果没有defalut语句,那么select语句将被阻塞,直到至少有一个通信可以进行下去
func main() {
ch := make(chan int)
quit := make(chan bool)
//新开一个协程,一直监听管道中的值
go func() {
for {
select {
case num := <-ch:
fmt.Printf("num = %d\n", num)
case <-time.After(time.Second * 10):
fmt.Println("超时")
quit <- true
}
}
}()
for i := 0; i < 5; i++ {
ch <- i
time.Sleep(time.Second)
}
//取出quit管道中的值
<-quit
fmt.Println("程序结束")
}
当for循环结束的时候会执行下一个case,等待10s,然后输出超时和程序结束
标签:语句,每天,哪怕,chan,阻塞,打卡,执行,select From: https://www.cnblogs.com/jianjiana/p/16931024.html